Компьютерная графика / Lab3_Preobr_yarkosti
.pdfПреобразование яркости графических изображений |
11(23) |
Например,
y=imread('cliff.jpg'); imshow(y), pixval
figure, imshow(y(:,:,1), [ ]), pixval figure, imshow(y(:,:,2), [ ]), pixval figure, imshow(y(:,:,3), [ ]), pixval
Если функция imshow используется для вывода в одном графическом окне изображений разного типа с разными цветовыми картами, то атрибуты цвета установятся по всему окну одинаковыми и заданными последним выводом. Такой недостаток отсутствует в функции subimage. Например (рис.4)
[X1,map1]=imread('forest.tif');
[X2,map2]=imread('trees.tif'); subplot(1,2,1), subimage(X1,map1) subplot(1,2,2), subimage(X2,map2)
Рис.4 Пример вывода изображений с разными цветовыми картами
2.3 Запись изображений
Изображения записываются на диск функций imwrite. Типовой формат команды имеет вид imwrite(y, 'filename', fmt), где y – матрица изображения, filename - имя графического файла, fmt - допустимое расширение. Например,
команда
imwrite(y, ‘auto’, ‘bmp’)
записывает матрицу y в файл формата bmp с именем auto и размещает его в рабочей папке. Аналогичные действия выполняются командой
imwrite(y, ‘auto.bmp’)
Эти команды должны указывать на расширение файла, поддерживаемое систе-
мой MATLAB и перечень которых приведен в описании системы.
В зависимости от выбранного формата функция imwrite может иметь и
12(23) |
Преобразование яркости графических и зображений |
другие параметры. Например, применительно к файлам формата JPEG команда может иметь вид:
imwrite(y, ‘auto.jpg’, ‘quality’, q)
где q – целое число в интервале от 0 до 100 (чем меньше число, тем больше сте-
пень искажения при сжатии файла в формате JPEG).
При работе с изображениями формата tif:
imwrite(y,‘filename.tif’,‘compression’,‘parameter’,‘resolution’,[colres rowres])
где ‘parameter’ может иметь только следующие значения: ‘none’ - отсутствие сжатия, ‘packbits’ – сжатие используется по умолчанию для небинарных фай-
лов, ‘ccitt’ - сжатие используется по умолчанию для бинарных файлов. Массив [colres rowres] размера 1х2 содержит две целые переменные, которые сообща-
ют разрешение, соответственно, по столбцам и по строкам в точках на условную единицу (по умолчанию [72,72]). Например, если размер изображения указан в дюймах, то colres - число точек (пикселов) на дюйм (dpi – dot per inch) по вер-
тикали, и, соответственно, rowres - разрешение по горизонтали.
Например, командами
z=imread('handkey.jpg'); imwrite(z,'handkey2.tif','compression','none','resolution',[300 300]);
исходное изображение из файла считывается в матрицу z, а затем записывается в файл handkey2.tif. Исходное изображение записано в формате jpg с разреше-
нием 200dpi и имеет размеры 353х230 пикселей (4.5х2.9см). В результате пере-
записи изображение имеет формат tif , те же пиксельные размеры 353х230, но размер изображения уменьшен до значения 3х1.9см по причине более плотного расположения точек, т.е. пикселей (вначале 200 точек в дюйме, по окончании -
300), общее количество которых не изменилось.
Тот же результат может быть получен следующей командой:
res=round(200*4.5/3);
imwrite(z,'handkey3.tif','compression','none','resolution',res);
Сохранить изображение в том же виде, в котором оно представлено на экране монитора можно командами Export, выбрав ее из ниспадающего меню
File в окне изображений, и print:
print -fno -dfileformat -rresno filename
Преобразование яркости графических изображений |
13(23) |
где no – номер окна интересующего изображения, fileformat – один из допустимых форматов изображения, resno – разрешение в dpi, filename – имя файла.
Например,
print -f1 -dtiff -r300 hy_handkey
Если ограничиться только набором команды print, то последнее окно изображе-
ния будет распечатано на принтере.
2.4 Запрос данных о файле
Для оценки степени достигнутого сжатия и получения дополнительной информации о файле используется функция imfinfo, которая имеет вид
imfinfo filename
Например, последовательность команд
imwrite(y, ‘auto.jpg’, ‘quality’, 10) imfinfo auto.jpg
выдает следующую информацию:
Filename: 'auto.jpg'
FileModDate: '16-Feb-2009 13:07:50' FileSize: 3866
Format: 'jpg' FormatVersion: ''
Width: 328
Height: 220
BitDepth: 24 ColorType: 'truecolor'
FormatSignature: '' NumberOfSamples: 3
CodingMethod: 'Huffman'
CodingProcess: 'Sequential' Comment: {}
Размер файла FileSize указан в байтах. Для определения количества бай-
тов в исходном изображении надо перемножить значения Width, Height BitDepth, а результат разделить на 8, т.е. 328х220x24=1731840/8=216480.
Для оценки степени сжатия следует полученный результат разделить на размер файла, т.е. 216480/3866=55.9959.
Данные, выводимые функцией imfinfo, можно занести в структурные пе-
ременные и использовать их в дальнейшем. Например, следующие команды за-
14(23) |
Преобразование яркости графических и зображений |
носят данные о файле в переменную K и рассчитывают степень сжатия:
K = imfinfo (‘auto.jpg’); image_bytes=K.Width*K.Height*K.BitDepth/8; compressed_bytes=K.FileSize; compressed_ratio=image_bytes/ compressed_bytes compressed_ratio = 55.9959
3 ПОЭЛЕМЕНТНЫЕ ПРЕОБРАЗОВАНИЯ
3.1.Изменение яркости пикселей
Впростейшем варианте преобразования изображений окрестность имеет размер 1х1, т.е. состоит из одного центрального пиксела. В таком случае значе-
ние яркости пиксела в выходном изображении зависит только от значения ярко-
сти соответствующего пиксела входного изображения, что применительно к монохромным изображениям предполагает градационное преобразование.
Для преобразования яркости полутоновых изображений в системе MATLAB используется функция imadjust:
g= imadjust(f, [low_in high_in], [low_out high_out], gamma)
Функция преобразует значения яркости из интервала [low_in, high_in] в интервал [low_out, high_out]. Значения, меньшие порогового уровня low_in, прирав-
ниваются значению low_out, а большие порогового уровня high_in - приравни-
ваются значению high _out. Входное изображение может иметь класс uint8, uint16 или double, а класс выходного совпадает с классом входного. Все входные параметры функции imadjust, за исключением f, должны быть веществен-
ными числами в интервале от 0 до 1, независимо от класса f. Если f принадлежит классу uint8 (или uint16), то функция imadjust умножает эти параметры на
255 (или 65535). Если вместо вектора указан пустой вектор, то используются величины по умолчанию, равные [0 1].
Если high_out меньше, чем low_out, то выходные яркости симметрично переворачиваются.
Параметр gamma служит для указания закона преобразования (рис.5).
Преобразование яркости графических изображений |
15(23) |
Рис.5 Варианты преобразований в функции imadjust
Следующие команды формируют негативное изображение (рис.6):
f=imread('moon.tif'); imshow(f, [ ]) % Позитив fneg=imadjust(f, [0 1], [1 0]);
figure; imshow(fneg, [ ]) % Негатив
а) б) в) г) Рис.6 Преобразование изображения функцией imadjust
На рис.6в показан результат выполнения команды
g2=imadjust(f, [0.5 0.75], [1 0]);
На рис.6г показан результат выполнения команды
g3=imadjust(f, [ ], [ ], 2);
Негативное изображение формируется также функцией imcomplement:
figure; imshow(imcomplement(f), [ ])
3.2.Логарифмическое преобразование яркости
Спомощью выражения
g = c * log(1 + double(f))
где c – некоторая константа, в системе MATLAB возможно выполнение лога-
рифмических преобразований. Закон преобразования аналогичен закону преоб-
16(23) |
Преобразование яркости графических и зображений |
разования в функции imadjust при gamma<1, но с зафиксированной кривизной графика и при граничных выходных значениях, равных 0 и 1.
Логарифмическое преобразование успешно применяется при сжатии ди-
намического диапазона с целью улучшения визуализации изображений. Напри-
мер, следующие команды переводят изображение из диапазона [0…1.5x106] в
изображение с диапазоном [0…255] (рис.7):
g = im2uint8(mat2gray(log(1 + double(f)))); imshow(g)
Функция mat2gray переводит величины в диапазон [0,1], а функция im2uint8 преобразует их к диапазону [0, 255].
Рис.7 Изображение до и после логарифмического преобразования
3.3. Изменение контрастности
Команда
g=1./(1 + (m./(double(f) + eps)).^E)
позволяет изменить контрастность изображения. В результате выполнения ко-
манды формируется изображение с большей контрастностью.
Команда сжимает входные величины, меньшие m, в более узкий поддиапазон темных уровней на выходном изображении, и величины, боль-
шие m - в более узкую полосу ярких уровней
(рис.8). Параметр E устанавливает наклон функции, например E=20 или 5 (рис.9).
Рис.8 Закон преобразования контрастности
Преобразование яркости графических изображений |
17(23) |
Рис.9 Примеры преобразования контрастности
4 ЭКВАЛИЗАЦИЯ ГИСТОГРАММ Результат эквализации изображения заключается в увеличении динамиче-
ского диапазона уровней яркости, что обычно означает большую контрастность выходного изображения. В случае дискретного представления данных методика сводится к эквализации гистограмм изображений.
Пусть pr rj , j=1, …, L, обозначает гистограмму уровней яркости некото-
рого исходного изображения. Величины нормированной гистограммы являются приближениями вероятностей появления каждого уровня яркости на изображе-
k |
|
k |
n j |
|
|
нии. Преобразование эквализации имеет вид: sk T rk pr |
rj |
|
при |
||
n |
|||||
j 1 |
|
j 1 |
|
k=1, …,L, где sk – величина яркости обработанного изображения, соответству-
ющая значению яркости rk исходного изображения.
Эквализация гистограмм реализуется функцией histeq: g=histeq(f, nlev),
где f – исходное изображение, nlev – число уровней интенсивности, установ-
ленное для выходного изображения. Если nlev=L, т.е. общему числу возможных уровней исходного изображения, то реализуется функция преобразования T rk .
Если nlev<L, то уровни перераспределяются таким образом, чтобы обеспечить плоскую гистограмму. По умолчанию nlev равно 64.
18(23) |
Преобразование яркости графических и зображений |
Например, на рис.10а представлена фотография пыльцы, сделанная на электронном микроскопе (увеличение примерно в 700 раз), а на рис.10б – его гистограмма. Изображение является очень темным и имеет узкий динамический диапазон значений яркости (гистограмма полностью расположена в темном участке спектра).
Изображение на рис.10в является гистограммной эквализацией исходного изображения. В результате преобразования повысилась средняя яркость и улучшилась контрастность (рис.10г). Изменение контрастности вызвано суще-
ственным расширением динамического диапазона на всю шкалу яркости.
imshow(f) figure, imhist(f) ylim('auto') g=histeq(f,256);
figure, imshow(g) figure, imhist(g) ylim('auto')
18000 |
|
|
|
|
|
16000 |
|
|
|
|
|
14000 |
|
|
|
|
|
12000 |
|
|
|
|
|
10000 |
|
|
|
|
|
8000 |
|
|
|
|
|
6000 |
|
|
|
|
|
4000 |
|
|
|
|
|
2000 |
|
|
|
|
|
0 |
|
|
|
|
|
0 |
50 |
100 |
150 |
200 |
250 |
а) |
|
|
б) |
|
|
18000
16000
14000
12000
10000
8000
6000
4000
2000
0
0 |
50 |
100 |
150 |
200 |
250 |
в) г)
Рис.10 Пример эквализации гистограммы
Преобразование яркости графических изображений |
19(23) |
Вид функции преобразования предыдущего изображения показан на рис.11 и получен при выполнении следующих команд:
Output intensity
1
0.8
0.6
0.4
0.2
00
|
|
|
|
|
|
hnorm=imhist(f)./numel(f); |
|
|
|
|
|
|
|
|
|
|
|
|
|
sdf=cumsum(hnorm); |
|
|
|
|
|
|
x=linspace(0, 1, 256); |
|
|
|
|
|
|
plot(x, sdf); |
Transformation function |
|
|
|
|
axis([0 1 0 1]); |
|
|
|
|
|
set(gca, 'xtick', 0:.2:1) |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
set(gca, 'ytick', 0:.2:1) |
|
|
|
|
|
|
xlabel('Input intensity', 'fontsize', 9) |
|
|
|
|
|
|
ylabel('Output intensity', 'fontsize', 9) |
|
|
|
|
|
|
text(0.18, 0.5, 'Transformation function', |
0.2 |
0.4 |
0.6 |
0.8 |
1 |
Input intensity
'fontsize', 9)
Рис.11 Функция преобразования
Во многих приложениях необходимо получить изображение с заданной формой гистограммы. Такой процесс называется гистограммной подгонкой или гистограммной спецификацией и реализован в функции histeq со следующим вариантом синтаксиса:
g=histeq(f, hspec),
где hspec - заданная гистограмма (вектор-строка), состоящая из целых чисел,
соответствующих одинаковым разбиениям диапазона уровней.
Например, на рис.12а показано изображение спутника Марса Фобоса, а на рис.12б – его гистограмма, полученная функцией imhist(f). Обработка командой histeq(f, 256) существенно не улучшает качество (рис.12в). Поэтому необхо-
димо задать гистограмму, позволяющую качественно улучшить изображение.
Для данного примера гистограмма должна иметь меньшую концентрацию ком-
понент в нижней части градационной шкалы, но при этом сохранять общую форму гистограммы исходного изображения, которая имеет два четко выделен-
ных активных участка – возле нулевого значения и в верхней части градацион-
ной шкалы.
Такой тип гистограмм можно смоделировать с помощью нормированных мультимодальных гауссовых функций. В любом случае, первоначально задача сводится к формированию вектор-строки hspec.
20(23) |
Преобразование яркости графических и зображений |
|||||||||||||||||
|
4.5 |
x 105 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
50 |
100 |
150 |
200 |
250 |
а) |
|
|
|
|
|
|
б) |
|
|
|
|
|
|
|
|
|
|||
4.5 |
x 105 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
50 |
100 |
150 |
200 |
250 |
||||||||||||||
в) |
|
|
|
|
|
|
г) |
|
|
|
|
|
|
|
|
|
Рис.12 Пример эквализации гистограммы
Для рассматриваемого примера улучшение изображения обеспечивается
при заданной гистограмме, закон изменения которой показан на рис.13а. Значе-
ния соответствующей вектор-строки равны:
hspec = |
|
|
|
|
|
|
|
|
0.0019 |
0.0019 |
0.0020 |
0.0020 |
0.0021 |
0.0022 |
0.0024 |
0.0025 |
0.0027 |
0.0029 |
0.0031 |
0.0034 |
0.0037 |
0.0040 |
0.0044 |
0.0048 |
0.0053 |
0.0058 |
0.0064 |
0.0070 |
0.0077 |
0.0084 |
0.0091 |
0.0099 |
0.0106 |
0.0114 |
0.0122 |
0.0130 |
0.0138 |
0.0145 |
0.0152 |
0.0159 |
0.0165 |
0.0170 |
0.0175 |
0.0179 |
0.0181 |
0.0183 |
0.0184 |
0.0184 |
0.0182 |
0.0180 |
0.0177 |
0.0173 |
0.0168 |
0.0162 |
0.0156 |
0.0149 |
0.0142 |
0.0134 |
0.0126 |
0.0118 |
0.0110 |
0.0102 |
0.0095 |
0.0087 |
0.0080 |
0.0073 |
0.0067 |
0.0061 |
0.0056 |
0.0051 |
0.0046 |
0.0042 |
0.0039 |
0.0035 |
0.0032 |
0.0030 |
0.0028 |
0.0026 |
0.0024 |
0.0023 |
0.0022 |
0.0021 |
0.0020 |
0.0019 |
0.0019 |
0.0018 |
0.0018 |
0.0018 |
0.0018 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |
0.0017 |