Настройка параметров в окне сканера
Разрешение
Изменить разрешение сканирования можно во всплывающем меню Resolution (Разрешение). Более высокие разрешения требуют больше памяти и времени передачи, однако позволяют получить более качественное отсканированное изображение. В таблице ниже приведены имеющиеся значения разрешения и доступные цвета.
Resolution (Разрешение) | Black & White (Черно-белое)/Grey (Error Diffusion) (Серый тон (диффузный)) | 8 bit color (8-битный цвет) | True Grey (Настоящий серый)/24 Bit Color (24-битный цвет) |
100 × 100 т/д | Да | Да | Да |
150 × 150 т/д | Да | Да | Да |
200 × 200 т/д | Да | Да | Да |
300 × 300 т/д | Да | Да | Да |
400 × 400 т/д | Да | Да | Да |
600 × 600 т/д | Да | Да | Да |
1200 × 1200 т/д | Да | Нет | Да |
2400 × 2400 т/д | Да | Нет | Да |
4800 × 4800 т/д | Да | Нет | Да |
9600 × 9600 т/д | Да | Нет | Да |
19200 × 19200 т/д | Да | Нет | Да |
Верх страницы
Тип сканирования
• | Black & White (Черно-белое) Используется для текста или линейных изображений. |
• | Grey (Error Diffusion) (Серый тон (диффузный)) Используется для фотографических изображений или графики. (В этом случае используется диффузный метод для создания смоделированных серых изображений без использования истинных серых точек. Для создания эффекта серого черные точки размещаются по определенной схеме.) |
• | True Grey (Настоящий серый) Используется для фотографических изображений или графики. Этот режим более точен, так как в нем используется до 256 оттенков серого. |
• | 8 Bit Color (8-битный цвет) Для сканирования изображения используется до 256 цветов. |
• | 24 Bit Color (24-битный цвет) Для сканирования изображения используется до 16,8 миллионов цветов. Хотя при использовании типа сканирования 24 Bit Colour (24-битный цвет) получается изображение с наиболее точным отображением цвета, файл с изображением будет приблизительно в три раза больше файла, созданного при помощи 8 Bit Colour(8-битный цвет). |
Верх страницы
Формат документа
Выберите один из следующих форматов документа:
• | A4 |
• | JIS B5 |
• | Letter |
• | Legal |
• | A5 |
• | Executive |
• | Business Card (Визитка) Для сканирования визитных карточек выберите формат Business Card (Визитка), а затем положите карточку лицевой стороной вниз в центре левой части стекла сканера, совместив ее с направляющими документа. |
• | Photo (Фотография) |
• | Index Card (Учетная карточка) |
• | Photo L (Фото L) |
• | Photo 2L (Фото 2L) |
• | Postcard 1 (Открытка 1) |
• | Postcard 2 (Открытка 2) |
• | Custom (Пользовательский) (размер от 0,35 × 0,35 дюймов до 8,5 × 14 дюймов или 8,9 × 8,9 мм до 215 x 355 мм определяется пользователем) После выбора пользовательского формата можно отрегулировать область сканирования. Width (Ширина): введите ширину пользовательского формата. Height (Длина): введите длину пользовательского формата. |
Верх страницы
Настройка изображения
• | Brightness (Яркость) Отрегулируйте настройку (от -50 до 50) для получения наилучшего изображения. Значение по умолчанию: 0. Это среднее значение, обычно подходящее для большинства изображений. Задать уровень Brightness (Яркость) можно путем перемещения ползунка вправо или влево для получения более светлого или более темного изображения. Для задания этого уровня можно также ввести значение в поле. Если отсканированное изображение слишком светлое, задайте более низкое значение параметра Brightness (Яркость) и снова отсканируйте документ. Если изображение слишком темное, задайте более высокое значение параметра Brightness (Яркость) и снова отсканируйте документ. Примечание
| ||
• | Contrast (Контрастность) Уровень контрастности можно увеличить или уменьшить путем перемещения ползунка влево или вправо. При его увеличении подчеркиваются темные и светлые области изображения, а при уменьшении обнаруживается больше деталей в областях серого. Для задания параметра Contrast (Контрастность) можно также ввести значение в поле. |
Примечание
Настройка Contrast (Контрастность) возможна только при задании для параметра Scan Type (Тип сканирования) значения Grey (Error Diffusion) (Серый тон (диффузный)) или True Gray (Настоящий серый). |
При сканировании фотографий или других изображений для использования в текстовом редакторе или других графических приложениях попробуйте сделать несколько проб с разными значениями параметров Resolution (Разрешение), Colour Type (Тип цвета), Brightness (Яркость) и Contrast (Контрастность) для определения наиболее подходящей настройки.
Верх страницы
Параметры в диалоговом окне “Установка сканера”
Параметры в диалоговом окне “Установка сканера”
Тип изображения
Выберите тип выводимого изображения (Фото, Web или Текст. Разрешение) и параметр Тип сканирования будет меняться для каждой настройки по умолчанию.
Параметры по умолчанию перечислены в таблице ниже:
Тип изображения | Разрешение | Тип сканирования | |
Фото | Используется для сканирования фотоизображений. | 300 x 300 т/д | Цветное (24-bit) |
Web | Используется для отсканированных изображений, прилагаемым к веб-страницам. | 100 x 100 т/д | Цветное (24-bit) |
Текст | Используется для сканирования текстовых документов. | 200 x 200 т/д | Чёрно-белое |
Наверх страницы
Разрешение
Разрешение сканирования можно выбрать в раскрывающемся списке Разрешение. Более высокие разрешения требуют больше памяти и времени передачи, однако позволяют получить более качественное отсканированное изображение. В таблице ниже приведены имеющиеся значения разрешения и доступные цвета.
Разрешение | Чёрно-белое/ | Цветное (256 оттенков) | Настоящий серый/Цветное (24 bit) |
100 x 100 т/д | Да | Да | Да |
150 x 150 т/д | Да | Да | Да |
200 x 200 т/д | Да | Да | Да |
300 x 300 т/д | Да | Да | Да |
400 x 400 т/д | Да | Да | Да |
600 x 600 т/д | Да | Да | Да |
1200 x 1200 т/д | Да | Нет | Да |
2400 x 2400 т/д | Да | Нет | Да |
4800 x 4800 т/д | Да | Нет | Да |
9600 x 9600 т/д | Да | Нет | Да |
19200 x 19200 т/д | Да | Нет | Да |
Наверх страницы
Тип сканирования
• | Чёрно-белое Используется для текста или штриховых рисунков. |
• | Серый тон Используется для фотографических изображений или графики. (В этом случае используется диффузия ошибок — это метод для создания смоделированных серых изображений без использования истинных серых точек. Для создания эффекта серого черные точки размещаются по определенной схеме.) |
• | Настоящий серый Используется для фотографических изображений или графики. Этот режим более точен, так как в нем используется до 256 оттенков серого. |
• | Цветное (256 оттенков) Для сканирования изображения используется до 256 цветов. |
• | Цветное (24 bit) Для сканирования изображения используется до 16,8 миллионов цветов. Хотя при использовании Цветное (24 bit) получается изображение с наиболее точными цветами, файл изображения будет приблизительно в три раза больше, чем файл, созданный при использовании Цветное (256 оттенков). Он требует самого большого объема памяти и самого длительного времени передачи. |
Наверх страницы
Устранение дефектов
С помощью этого параметра можно улучшить качество сканированных изображений. Настройка Устранение дефектов доступна при использовании Цветное (24 bit) и значений разрешения сканирования 300 x 300 т/д, 400 x 400 т/д или 600 x 600 т/д.
Наверх страницы
Яркость
Отрегулируйте настройку (от -50 до 50) для получения наилучшего изображения. Значение по умолчанию – 0, соответствующее среднему значению.
Можно задать уровень параметра Яркость, перемещая ползунок вправо или влево для получения более светлого или более темного изображения. Для задания этого уровня можно также ввести значение в окно.
Если отсканированное изображение слишком светлое, задайте более низкий уровень параметра Яркость и заново отсканируйте документ. Если изображение слишком темное, задайте более высокий уровень параметра Яркость и заново отсканируйте документ.
Примечание
Настройка яркости доступна только в том случае, если выбран параметр Чёрно-белое, Серый тон или Настоящий серый. |
Наверх страницы
Контрастность
Можно увеличить или уменьшить уровень параметра Контрастность, перемещая ползунок влево или вправо. При его увеличении подчеркиваются темные и светлые области изображения, а при его уменьшении обнаруживается больше деталей в зонах серого. Можно также ввести значение в поле, чтобы задать Контрастность.
Примечание
Настройка контрастности доступна только в том случае, если выбран параметр Серый тон или Настоящий серый. |
При сканировании фотографий или других изображений для использования в текстовом редакторе или других графических приложениях попробуйте сделать несколько проб с разными значениями контрастности и разрешения для определения наиболее подходящей настройки.
Наверх страницы
Размер документа
Выберите один из следующих форматов:
• | A4 210 x 297 мм |
• | JIS B5 182 x 257 мм |
• | Letter 215,9 x 279,4 мм |
• | Legal 215,9 x 355,6 мм (Для DCP-8070D, MFC-8370DN и MFC-8380DN доступен вместе с автоподатчиком. |
• | A5 148 x 210 мм |
• | Executive 184,1 x 266,7 мм |
• | Визитка 90 x 60 мм Для сканирования визитных карточек выберите формат Визитка, затем поместите визитную карточку лицевой стороной вниз в центре левой стороны стекла сканера, как указано на направляющих для документов в аппарате. |
• | Фотография 10 x 15 см |
• | Учетная карточка 127 x 203,2 мм |
• | Фотография L 89 x 127 мм |
• | Фотография 2L 13 x 18 см |
• | Открытка 1 100 x 148 мм |
• | Открытка 2 (двойная) 148 x 200 мм |
• | Выбирает пользователь Если выбрать Задать в качестве формата, появится диалоговое окно Заданный размер документа. |
Введите значения параметров Имя, Ширина и Высота для документа.
В качестве единиц измерения ширины и длины можно выбрать “мм” или “дюймы”.
Примечание
• | Истинный размер для выбранного формата можно видеть на экране.
| ||||||
• | Может настраиваться пользователем в диапазоне от 8,9 x 8,9 мм до 215,9 x 355,6 мм |
Наверх страницы
256 оттенков серого: преобразование цветных изображений в оттенки серого
В этом посте я покажу вам, как преобразовать полноцветное изображение в изображение, полностью состоящее из разных оттенков серого. Тип изображения, которое мы создадим, называется оттенки серого , потому что каждый цвет, из которого состоит изображение, хранится как позиция на заранее определенной шкале оттенков серого, которая начинается с черного и заканчивается белым.
Позже мы также используем это изображение в оттенках серого для создания чисто черно-белого изображения, в котором используются только эти два цвета, без промежуточных оттенков серого.
Оглавление
Выбор изображения для работы
Если мы собираемся протестировать код, который будем писать, имеет смысл начать с попытки манипулировать одним и тем же изображением. Затем вы можете сравнить результаты, которыми я делюсь в этом посте, с теми, которых достигли вы, и посмотреть, заметите ли вы какие-либо различия.
Я выбрал приведенное ниже изображение известного художника 19-го века Винсента Ван Гога, так как оно красочное и драматичное с контрастными областями света и тени. Мы собираемся сделать его менее красочным, но, надеюсь, не менее отличительным.
Автопортрет в серой фетровой шляпе (1887) Винсента Ван Гога. Щелкните правой кнопкой мыши изображение Ван Гога и сохраните его на свой компьютер в той же папке, где вы собираетесь писать код Go. Переименуйте изображение в input.jpg , чтобы оно соответствовало файлу, который я использовал изначально.
Доступ к пикселям
Самый простой способ начать — написать программу, которая получает некоторую информацию о каждом пикселе нашего изображения. пикселей — это наименьшая точка, имеющая собственный цвет, а изображение — это просто набор этих точек, которые хранятся в одном файле и просматриваются вместе для получения необходимого визуального эффекта.
пакет основной Импортировать ( "ФМТ" "изображение" "изображение/цвет" _ "изображение/jpeg" "бревно" "Операционные системы" ) основная функция () { файл, ошибка := os.Open("input.jpg") если ошибка != ноль { log.Fatalln(ошибка) } отложить файл.Закрыть() img, _, ошибка := image.Decode(файл) если ошибка != ноль { log.Fatalln(ошибка) } размер := img.Границы().Размер() для х := 0; х < размер.Х; х++ { для у := 0; у <размер.Y; у++ { пиксель: = изображение. В (х, у) col := color.RGBAModel.Convert(пиксель).(color.RGBA) fmt.Printf( "КРАСНЫЙ: %d, ЗЕЛЕНЫЙ: %d, СИНИЙ: %d, АЛЬФА: %d\n", цвет R, цвет G, цвет B, цвет A, ) } } }
Обратите внимание, как мы использовали подчеркивание при импорте пакета "image/jpeg"
, что было необходимо, чтобы сообщить компилятору Go, что мы не собираемся использовать какие-либо экспортированные функции или константы из пакета, но нам все еще нужно импортировать пакет для его побочных эффектов.
Если бы мы не использовали символ подчеркивания, команда go fmt
полностью удалила бы импорт. В данном случае это лишило бы наш код возможности обрабатывать файла .jpg , поскольку image. Функция Decode
основана на побочных эффектах пакета «image/jpeg» . Если бы вместо этого мы работали с файлом .gif , мы бы, например, импортировали пакет "image/gif"
Вы можете видеть, что основная функциональность в приведенном выше коде включает итерацию по координатам x и y для посещения каждого пикселя изображения. Мы получаем информацию о цвете пикселя, используя структуру
color.RGBA
, и распечатываем значения красного, зеленого, синего и альфа-канала.
Как хранятся цвета
Каждый цвет на современном компьютере может быть закодирован комбинацией из четырех байтов.
Первые три байта содержат значения красного, зеленого и синего цветов. Каждый из этих байтов представлен uint8
в Go, который может хранить число от 0 до 255 (всего 256 различных значений), однако они также могли быть представлены родным типом байт
, который это просто псевдоним для uint8
.
Используя всего три байта, наши компьютеры могут отображать 16 777 216 различных цветов (256³) — хотя наши глаза могут не различать четко каждый из этих цветов!
Радуга содержит все цвета, видимые человеческому глазу.Четвертый байт используется для хранения альфа-значения, которое просто представляет прозрачность цвета.
Если для альфа-значения установлено значение 0, цвет полностью прозрачен (так что, по сути, значения красного, зеленого и синего не имеют значения, потому что цвет не будет виден). Если для альфа-значения установлено значение 255, цвет полностью непрозрачен/непрозрачен. Альфа-значения между 0 и 255, естественно, будут более или менее прозрачными.
Таким образом, для изображений без какой-либо прозрачности (таких как наше изображение радуги выше или портрет Ван Гога, которым мы собираемся манипулировать) все альфа-байты будут установлены на 255, максимально возможное значение.
Некоторые примеры значений RGB
Ниже приведен список различных цветов вместе с их значениями красно-зелено-синий (RGB), так что вы можете увидеть эффект различных комбинаций:
Название цвета | Синий Значение |
---|---|
White | (255, 255, 255) |
Black | (0, 0, 0) |
Red | (255, 0, 0) |
Green | (0, 255, 0) |
Blue | (0, 0, 255) |
Darker Red | (128, 0, 0) |
Darker Green | (0, 128, 0) |
Темно-синий | (0, 0, 128) |
Светло-зеленый | (192, 255, 192) |
Turquoise/Aquamarine | (0, 255, 255) |
Yellow | (255, 255, 0) |
Pink | (255, 0 , 255) |
Purple | (128, 0, 128) |
PEACH | (255, 128, 128) |
в приведенной выше таблице вы можете использовать веб-сайт для выбора цвета, который позволит вам вводить значения RGB.
Превращение всех цветов в серый
Мы видели, как перебирать все пиксели, так что теперь нам просто нужно решить, как их изменить — и, что более важно, во что их изменить.
Если для черного цвета все значения красного, зеленого и синего установлены на 0, а для белого цвета все значения красного, зеленого и синего установлены на 255, то мы можем сделать вывод, что оттенки серого также будут иметь все значения. их значений RGB установлены на одно и то же число: более низкие значения будут давать более темный оттенок серого, а более высокие значения дадут более светлый оттенок.
Если это так, то, конечно же, мы можем превратить любой цвет в оттенок серого, просто усредняя три значения красного, зеленого и синего (суммируя их вместе и разделив результат на три) и присваивая всем трем значениям это единственное число. . Именно такой подход мы используем в приведенном ниже коде:
package main Импортировать ( "изображение" "изображение/цвет" "изображение/jpeg" "бревно" "математика" "Операционные системы" ) func toGreyscale(originalImage image.Image) image.Image { размер: = исходное изображение.Границы().Размер() прямоугольник := изображение.Rect(0, 0, размер.X, размер.Y) модифицированныйImg := image.NewRGBA(прямой) для х := 0; х < размер.Х; х++ { для у := 0; у <размер.Y; у++ { пиксель: = originalImage.At(x, y) originalColor := color.RGBAModel.Convert(пиксель).(color.RGBA) красный: = float64 (originalColor.R) зеленый: = float64 (originalColor.G) синий: = float64 (originalColor.B) серый := uint8( math.Round((красный+зеленый+синий) / 3), ) модифицированный цвет: = цвет. RGBA { Р: серый, Г: серый, Б: серый, A: оригинальный цвет.A, } модифицированныйImg.Set(х, у, модифицированный цвет) } } вернуть модифицированное изображение } основная функция () { inputFile, ошибка := os.Open("input.jpg") если ошибка != ноль { log.Fatalln(ошибка) } отложить inputFile.Close() img, _, ошибка: = изображение. Декодировать (входной файл) если ошибка != ноль { log.Fatalln(ошибка) } greyImg := toGreyscale(img) outputFile, ошибка := os.Create("output.jpg") если ошибка != ноль { log.
Fatalln(ошибка) } отложить outputFile.Close() ошибка = jpeg.Encode (выходной файл, greyImg, ноль) если ошибка != ноль { log.Fatalln(ошибка) } }
В каком-то смысле мы снижаем качество информации, хранимой для каждого пикселя нашего изображения, потому что мы помещаем 3 байта информации в один байт.
Если мы подумаем математически, то увидим, как мы всегда можем свести набор чисел длиной n (где n больше единицы) к одному числу таким образом, просто взяв среднее значение — и хотя мы не сможем восстановить исходные числа из конечного числа, его значение все равно будет сильно зависеть от них. Окончательное число сохранит некоторую важную информацию об исходных числах, хотя логически невозможно, чтобы оно содержало точно такой же объем информации. Именно поэтому мы считаем усреднения такими полезными: они сохраняют, но упрощают.
В каждой итерации внутреннего цикла — возвращаясь к нашему примеру кода — мы сохраняем значение альфа точно таким, каким оно было изначально, поскольку мы всегда хотим, чтобы все пиксели были установлены на максимальное значение, а затем мы используем Set
метод на нашем изображении, чтобы обновить каждый пиксель с нашим новым цветом.
Результат в оттенках серого
На приведенном ниже рисунке показано, как должно выглядеть выходное изображение. Вы можете видеть, что большая часть тех же деталей была сохранена, только без использования ярких цветов.
Исходное изображение после обработки самодельным фильтром оттенков серого.Purely Black and White
Давайте доведем предыдущий подход до крайности. Вместо того, чтобы использовать 256 оттенков серого (или, технически, 254 оттенка серого + черный + белый) для воссоздания нашего изображения, давайте сделаем что-то еще более радикальное. Почему бы просто не использовать черно-белое? Все изображение можно воспроизвести всего двумя цветами, самым темным и самым светлым, которые могут обрабатывать наши компьютеры.
От до BlackandWhite 9Функция 0034 ниже делает именно это:
package main Импортировать ( "изображение" "изображение/цвет" ) func toGreyscale(originalImage image.Image) image.Image func toBlackAndWhite (исходное изображение image.Image, whiteThreshold uint8) image.Image { originalImage = toGreyscale (исходное изображение) размер: = исходное изображение.Границы().Размер() прямоугольник := изображение.Rect(0, 0, размер.X, размер.Y) модифицированныйImg := image.NewRGBA(прямой) для х := 0; х < размер.Х; х++ { для у := 0; у <размер.Y; у++ { пиксель: = originalImage.At(x, y) originalColor := color.RGBAModel.Convert(пиксель).(color.RGBA) модифицированноеЦветноеЗначение := исходныйЦвет.R если модифицированныйColorValue >= whiteThreshold { модифицированноеЦветЗначение = 255 } еще { модифицированноеЦветЗначение = 0 } модифицированный цвет: = цвет. RGBA { R: модифицированное значение цвета, G: модифицированное значение цвета, B: модифицированноеЦветноеЗначение, A: оригинальный цвет.A, } модифицированныйImg.Set(х, у, модифицированный цвет) } } вернуть модифицированное изображение }
Чтобы определить, какие пиксели должны быть белыми, а какие черными, наша новая функция принимает дополнительный аргумент whiteThreshold
. Сначала мы преобразуем изображение в оттенки серого, используя уже написанный нами код (я только что включил здесь объявление функции), а затем перебираем каждый пиксель: если значение каждого оттенка серого больше или равно порогу белого, цвет становится белым, иначе он становится черным.
Это действительно так просто!
Но это оставляет нас с одним важным вопросом без ответа: как мы узнаем, каким должно быть пороговое значение? Мы могли бы просто использовать метод проб и ошибок, но было бы разумно начать с порога 128, так как это точно середина диапазона, в котором может быть исходное значение цвета (между 0 и 255). Это означает, что если бы каждый пиксель изначально содержал случайный оттенок серого, то каждый пиксель с одинаковой вероятностью стал бы как белым, так и черным.
Если мы обнаружим, что наше окончательное изображение слишком белое, мы можем просто увеличить пороговое значение. И наоборот, если он слишком черный, мы можем уменьшить порог.
Мы также можем предположить, что если наше исходное изображение довольно темное, нам может потребоваться начать с низкого порога, а если оно достаточно светлое, нам может потребоваться использовать высокий порог.
Я использовал следующий код для вызова функции с выбранным порогом, сохранив остальную часть основной функции , как это было раньше:
const whiteThreshold = uint8(256 / 2) // 128 blackAndWhiteImg := toBlackAndWhite(img, whiteThreshold)
1-битный результат
Если изображение в оттенках серого можно назвать 8-битным изображением (поскольку оно потенциально включает 256 различных значений, которые могут храниться в байте, 8 битах, а 256 равно 2⁸), то наше черно-белое изображение можно назвать 1-битным изображением (поскольку оно потенциально включает 2 разных значения, только белое и черное, и они могут храниться в одном бите, так как 2 есть, по определению 2¹). По этой причине его также можно назвать бинарным изображением.
Ниже приведен результат, который я получил, когда запустил код с порогом 128. Изображение очень темное, что говорит о том, что мы могли бы лучше использовать более низкий порог, но это довольно хорошая инкапсуляция оригинала, учитывая, что он использует только два цвета.
Предоставление компьютеру самой тяжелой работы
Кажется, трудно выбрать правильное пороговое значение для нашего toBlackAndWhite 9Функция 0034. Однако существует только 256 возможных значений. Это не похоже на многое. Так почему бы нам просто не создать все 256 возможных изображений, используя каждое из различных пороговых значений, и сравнить их, чтобы найти то, которое выглядит лучше всего?
Мы могли бы сделать это, создав 256 различных выходных изображений и сравнив их визуально самостоятельно, но было бы еще лучше, если бы мы могли написать алгоритм, который сравнивает различные выходные изображения и возвращает только то, которое он считает лучшим.
Но нам нужно как-то различать их. Предположим, что если половина пикселей в выходном изображении белые, а половина — черные, это будет идеальный результат, поскольку это равное распределение наших двух цветов. Таким образом, чем ближе любое выходное изображение к этой гипотетической ситуации, тем больше вероятность, что мы его вернем.
В приведенном ниже коде мы подсчитываем количество черных пикселей в каждом выходном изображении и сравниваем его с половиной общего количества пикселей. Чем ближе эти два числа, тем лучше. Мы вычитаем два числа и берем абсолютное значение разницы, чтобы гарантировать, что не имеет значения, является ли одно из двух чисел большим или меньшим, а только то, что расстояние между ними меньше, чем расстояние, записанное для любого из двух чисел. предыдущие выходные изображения, которые мы рассмотрели:
основной пакет Импортировать ( "изображение" "изображение/цвет" "ФМТ" "математика" "синхронизировать" ) func toGreyscale(originalImage image.Image) image.Image func toBlackAndWhite(originalImage image.Image, whiteThreshold uint8) image.Image func toBlackAndWhiteWithCalculatedWhiteThreshold(originalImage image.Image) image.Image { размер: = исходное изображение.Границы().Размер() общее количество пикселей := размер.X * размер.Y halfPixels: = int(math.Round(float64(totalPixels)/2)) var NearestThreshold uint8 var NearestHalfPixelsDelta int var NearestImage image.Image var wg sync.WaitGroup var mutex sync.Mutex для я := 0; я < 256; я++ { WG.Добавить(1) go func(i int) { отложить wg.Done() модифицированное изображение: = toBlackAndWhite (исходное изображение, uint8 (i)) var blackPixels int для х := 0; х < размер.Х; х++ { для у := 0; у <размер.Y; у++ { пиксель: = модифицированныйImg.At(x, y) col := color.RGBAModel.Convert(пиксель).(color.RGBA) если col.R == 0 { черныйПиксели++ } } } отложить мьютекс. Разблокировать () мьютекс.Lock() halfPixelsDelta := int(math.Abs(float64(halfPixels - blackPixels))) если ближайшийHalfPixelsDelta == 0 || halfPixelsDelta < ближайшийHalfPixelsDelta { ближайшаяHalfPixelsDelta = половинаPixelsDelta ближайший порог = uint8(i) самое близкое изображение = модифицированное изображение } }(я) } wg.Подождите() fmt.Printf("ВЫБРАННЫЙ ПОРОГ: %d\n", ближайшийпорог) вернуть ближайшее изображение }
В зависимости от скорости вашего компьютера этот код может выполняться значительно дольше, чем исходная функция toBlackAndWhite
, потому что она выполняет гораздо больше работы, но делает нашу жизнь проще, автоматизируя выбор порогового значения. Лень — это добродетель, потому что она побуждает нас писать код для решения наших проблем.
Если бы мы хотели еще больше повысить эффективность, мы могли бы кэшировать результат функции toGreyscale
, которая вызывается один раз каждый раз, когда toBlackAndWhite
функция работает.
Окончательный 1-битный результат
Когда я запускал код, этот новый алгоритм выбрал пороговое значение 92, которое, как мы и предсказывали, значительно ниже, чем то, которое мы ранее выбрали сами.
Это позволяет более четко увидеть лицо Винсента Ван Гога, подчеркнув относительную темноту его бороды. Нижний порог также сохраняет больше пастозной кисти на заднем плане, которая так характерна для этого стиля постимпрессионистского искусства.
Автопортрет теперь имеет больше пикселей, окрашенных в белый цвет, чем в нашей предыдущей версии.Режимы изображения и таблицы цветов в Photoshop Elements
Указывает цветовую палитру, применяемую к индексированному цвету. изображение. Доступно 10 цветовых палитр:
Точная
Создает панель с использованием точных цветов, которые появляются в Изображение RGB — параметр доступен только в том случае, если изображение использует 256 или меньше цвета. Поскольку панель изображения содержит все цвета в изображение, нет дизеринга.
Система (Mac OS)
Использует 8-битную панель Mac OS по умолчанию, основанную на унифицированном выборка цветов RGB.
Система (Windows)
Использует 8-битную панель системы Windows по умолчанию, основанную на на равномерной выборке цветов RGB.
Веб
Использует 216 цветов, которые веб-браузеры, независимо от платформы, используйте для отображения изображений на мониторе, ограниченном 256 цветами. Использовать это возможность избежать дизеринга браузера при просмотре изображений на мониторе дисплей ограничен 256 цветами.
Однородный
Создает панель путем однородной выборки цветов из RGB
цветной куб. Например, если Photoshop Elements принимает
6 равномерно расположенных цветовых уровней, каждый из красного, зеленого и синего,
комбинация дает однородную панель из 216 цветов (6 в кубе = 6
х 6 х 6 = 216). Общее количество цветов, отображаемых в изображении
соответствует ближайшему идеальному кубу (8, 27, 64, 125 или 216)
меньше, чем значение в текстовом поле «Цвета».
Локальный или главный перцепционный
Создает пользовательскую панель, отдавая приоритет цветам, которые человеческий глаз обладает большей чувствительностью. Применяется локальное восприятие панель для отдельных изображений; Master Perceptual применяет выбранный панель для нескольких изображений (например, для производства мультимедиа).
Локальный или Мастер Выборочный
Создает таблицу цветов, аналогичную таблице перцептивных цветов,
но отдавая предпочтение широким цветовым областям и сохранению веб-цветов.
Этот параметр обычно создает изображения с максимальной целостностью цвета. Local Selective применяет панель к отдельным изображениям; Мастер Выборочный
применяет выбранную панель к нескольким изображениям (например, для
мультимедийная продукция).
Local или Master Adaptive
Создает панель путем выборки цветов из спектра чаще всего встречающиеся на изображении. Например, изображение RGB только с зеленый и синий цвета создают панель, состоящую в основном из зелени. и блюз. Большинство изображений концентрируют цвета в определенных областях изображения. спектр. Для более точного управления панелью сначала выберите часть изображения, содержащая цвета, которые вы хотите подчеркнуть. Photoshop Elements взвешивает конверсию в соответствии с этими цвета. Local Adaptive применяет панель к отдельным изображениям; Мастер Адаптивный применяет выбранную панель к нескольким изображениям (например, для мультимедийная продукция).
Пользовательский
Создает пользовательскую панель с помощью диалогового окна «Таблица цветов».
Либо отредактируйте таблицу цветов и сохраните ее для последующего использования, либо нажмите
Загрузить, чтобы загрузить ранее созданную таблицу цветов.