Uploaded by ilya-davydov2012

LB 7 8 ок

advertisement
Лабораторная работа №7
Исследование алгоритмов поиска и выделения разрывов
яркости на изображениях
1 Цель работы
• изучение основных алгоритмов цифровой обработки для поиска и
выделения разрывов яркости на изображениях;
• исследование алгоритмов поиска и выделения разрывов яркости на
изображениях путем моделирования в среде MATLAB;
• получение навыков практического программирования средствами
MATLAB.
2 Подготовка к работе
• Ознакомиться с теоретическим материалом и рекомендованной литературой.
• Подготовить ответы на контрольные вопросы.
3 Теоретический материал
Поиск и выделение на изображении резких изменений (перепадов, разрывов) яркости относят к разделу анализа изображений, а именно к поиску и
выделению контурных признаков. Контурные признаки часто определяют
очертания объектов и относятся к основным естественным признакам изображений. В зависимости от вида контурного признака задачи их выделения
можно разделить на три основных типа [1]:
– обнаружение (выделение) изолированных точек;
– обнаружение (выделение) линий;
– обнаружение (выделение) контуров.
3.1 Обнаружение перепадов яркости
Обнаружить на изображении перепады яркости можно, используя пер1
вую и вторую производные, поведение которых зависит от скорости изменения яркости. Имея профиль отдельной строки можно вычислить производные
и их модули:
– 1-я производная дискретной одномерной функции f ( x) определяется
как разность значений соседних элементов:
df
= f ( x + 1) − f ( x).
dx
– 2-я производная определяется как разность соседних значений первой
производной:
d2 f
= f ( x + 1) + f ( x − 1) − 2 f ( x).
dx 2
Вычисление первой производной одномерной функции в MATLAB
производится с помощью функции y1= diff(x). Если x – это профиль строки,
который описывается одномерным массивом (вектором), то diff(x) это вектор
разностей соседних элементов.
Для вычисления второй производной нужно применить функцию diff к
результату первого дифференцирования: y2=diff(y1).
Полезным при обнаружении разрывов яркости является анализ модулей первой и второй производных abs(y1) и abs(y2).
М-файл программы для построения профиля строки и его производных
первого и второго порядка, а также результаты его работы приведены ниже:
1
%=================zadanie_1======================================
2
3
f=imread('test_diff.jpg');
figure, imshow(f),title...
(['Test diff']);
prof=int16(f(50, :));
figure;
plot(prof),title(['Profile']);
y=diff(prof);
figure,plot(y);title(['Diff']);
y1=abs(y);
figure,
plot(y1,'b');title(['Abs(Diff)']);
y2=diff(y);
figure, plot(y2);title...
(['(2-Diff)']);
4
5
6
7
8
9
10
11
12
13
%загрузить изображение
%вывести изображение в окно
%рассчитать профиль для 50 строки
%построить
%профиль в окне
%вычислить 1-ю производную
%построить график производной
%вычислить модуль 1-й производной
%построить график модуля
%1-й производной
%вычислить 2-ю производную
%построить график
%2-й производной
2
14 y3=abs(y2);
15 figure, plot(y3);title...
(['Abs(2-Diff)']);
%вычислить модуль 2-й производной
%построить график модуля
%2-й производной
Рис. 7.1 – Дифференцирование первого порядка
Анализ полученных в программе графиков позволяет сделать следующие выводы:
3
– первая производная равна 0 на участках с постоянной яркостью и отлична от 0 на участках, где яркость изменяется;
– первая производная положительна при увеличении яркости и отрицательна при ее уменьшении;
– значение производной зависит от скорости изменения яркости. Чем
больше скорость изменения, тем больше значение производной;
– модуль первой производной имеет двойную ширину на линиях, толщина которых минимальна и составляет 1 пиксел.
Рис. 7.2 – Дифференцирование второго порядка
4
Анализ изменений второй производной позволяет сделать следующие
выводы:
– вторая производная равна 0 на участках с медленными изменениями
яркости и на участках, где яркость постоянна;
– в начале и конце наклонного участка формируется слабый отклик;
– величина отклика сильно зависит от скорости изменения яркости и
максимальна на тонких линиях;
– модуль второй производной формирует более сильный отклик на линиях, чем на ступеньках.
Сделанные выводы можно распространить и на двумерные производные первого и второго порядка.
3.2 Обнаружение и выделение изолированных точек
Анализируя свойства производных первого и второго порядка можно
заключить, что изолированные точки на изображении легко обнаруживаются
с помощью модуля 2-й производной. Поскольку величина модуля 2-й производной зависит от крутизны яркостного перепада, то точкам будут соответствовать максимальные значения (см. рис. 3.2). Используя пороговую обработку результата вычисления модуля 2-й производной их достаточно легко
можно выделить. При этом предполагается, что точки расположены на однородном или почти однородном фоне. Одна из реализаций маски пространственного фильтра для вычисления двумерной 2-й производной, которая может
использоваться для обнаружения изолированных точек, показана на рис. 3.3.
Рис. 7.3 – Маска фильтра 3х3 для выделения точек
5
Отклик такого фильтра вычисляется по формуле:
9
R = ∑ wi Z i ,
i =1
где
wi , Z i значение коэффициента маски и интенсивность пиксела изобра-
жения под ним. Считается, что в элементе изображения под центром маски
обнаружена точка, если модуль отклика превышает некоторое пороговое
значение Т
R ≥T .
Средствами MATLAB обнаружить точки на изображении можно с помощью функции imfilter, используя маску, показанную на рис. 7.3. При этом
большое значение имеет правильное задание порогового значения яркости Т.
Его можно определить на основе визуального анализа исходного изображения. Если порог Т задан, то обнаружить точки можно следующей командой:
g = abs(imfilter (f, w))>=T;,
где
f – исходное изображение;
w – маска фильтра;
g – результирующее изображение.
Если порог Т не задан, то его значение можно определить по резуль-
тату фильтрации. В этом случае нужно выполнить три этапа:
– обработать исходное изображение маской для обнаружения точек
abs(imfilter (f, w));
– найти значение порога Т, проводя измерения на отфильтрованном
изображении;
– вывести ту часть отфильтрованного изображения, для которой условие g>=T соблюдаются.
Этот подход реализован в следующей программе. Программа загружает
исходное изображение из файла с именем ‘chip.tif’, добавляет к исходному
изображению шум в виде черных и белых точек и выводит это изображение
на экран (рис. 7.4). Затем выполняется фильтрация исходного изображения с
целью выделения точек, после чего результат обработки выводится в отдель6
ное графическое окно (рис. 7.5). Дальнейшие действия сводятся к выбору порога разделения результата фильтрации (модуля отклика) и отсечения тех
компонент, модуль которых меньше выбранного порога. Завершается программа выводом сформированного изображения изолированных точек в графическое окно.
%===============выделение точек на изображении=======================
f=imread('.\chip.tif');
%загрузить изображение
figure; imshow (f);
%вывести изображение в окно
f1=imnoise(f, 'salt & pepper'); %добавить к изображению шум
figure; imshow (f1);
%вывести изображение в окно
f1=double(f1);
%преобразовать в формат double
w=[-1 -1 -1; -1 8 -1; -1 -1 -1];%создать маску фильтра
g= abs(imfilter(f1, w));
%обработать изображение фильтром
% и взять модуль
g1=mat2gray(g);
%привести к диапазону 0...1
figure;imshow (g1);title('Abs');%вывести изображение в окно
T = max(g1(:));
%установить порог по максимуму
%яркости
g2 = g1>= T;
%обрезать изображение по порогу
figure;imshow (g2); title...
%вывести результат фильтрации в окно
([' T = ',num2str(T)]);
Рис. 7.4 – Исходное изображение с точечными объектами
7
Рис. 7.5 – Модуль отклика фильтра
Анализируя рис. 7.5, на котором отображается модуль отклика фильтра, можно заметить, что вместе с белыми и черными обнаруженными точками на изображении присутствуют артефакты в виде вертикальных полос, соответствующие резким изменениям яркости более крупных деталей изображения. При этом точкам, находящимся на разных участках изображения соответствует различная яркость. В этом можно убедиться, выполнив измерения на увеличенном фрагменте изображения, например как это сделано на
рис. 3.5 справа. Поэтому при выделении обнаруженных точек большое значение имеет выбор правильного порога разделения T, который следует применить к изображению модуля отклика g1:
g2 = g1>= T;
В сформированном бинарном изображении g2 пикселы с яркостью меньше
выбранного порога будут отображаться черным, а остальные белым.
Результат работы программы при пороге разделения равном максимальному
значению яркости, показан на рис. 7.6.
8
Рис. 7.6 – Результат выделения точек при максимальном пороге разделения
Анализ рис. 7.6 показывает, что не все обнаруженные на изображении
точки выделены. Для улучшения результата попробуем изменить порог T,
уменьшив его в два раза. Для этого введем в программу команду
T = max(g1(:))/2;
Результат, показанный на рис. 7.7 (слева), говорит о том, что количество выделенных точек на изображении значительно увеличилось. Однако сравнение
с рис. 7.5 показывает, что еще не все из обнаруженных точек выделены.
Дальнейшее уменьшение порога разделения в 3 раза, до значения T=0.3333,
приводит к появлению ошибок: на изображении появляются протяженные
объекты, соответствующие перепадам яркости на крупных деталях (см. рис.
7.6 (справа). Поэтому порог разделения следует несколько увеличить.
На рис. 7.7 показано изображение выделенных точек при пороге,
уменьшенном в 2,7 раза от максимального. Следует признать, что такой результат является достаточно хорошим и задача выделения изолированных
точек решена.
9
Рис. 7.6 – Результат выделения точек при уменьшении порога разделения
в 2 (слева) и в 3 (справа) раза
Рис. 7.7 – Результат выделения точек при уменьшении порога разделения
в 2,7 раза
10
3.3 Обнаружение и выделение линий
Для обнаружения линий заданной ориентации толщиной 1 пиксел используются маски, показанные на рис. 7.8. На линиях другой толщины и
ориентации величина отклика уменьшается, что позволяет использовать пороговую обработку для выделения линий с нужными свойствами.
Рис. 7.8 – Маски для выделения линий: 1– горизонтальных,
2 – +45 градусов, 3 – вертикальных, 4 – -45 градусов
Приведенная ниже программа позволяет выделить на изображении линии ориентированные под углом +45 градусов толщиной в 1 пиксел. Результаты выделения можно видеть на рис. 7.9. Алгоритм выделения линий организован следующим образом:
– загрузка исходного изображения и вывод его в графическое окно
(рисунок 7.9, а);
– преобразование изображения в бинарное;
– создание маски фильтра для поиска линий ориентированных под углом +45 градусов;
– обработка исходного изображения эти фильтром и вывод результата
в графическое окно (рис. 7.9, б);
– вычисление модуля отклика результата фильтрации (рис. 7.9, в);
– формирование профиля для 75 строки;
– отсечение результата фильтрации по пороговому уровню равному
максимальному значению яркости и вывод результата в графическое
окно (рис. 7.9, в);
11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
=========%выделение линий на изображении=================
f=imread('.\Test_line_2inv.bmp'); %загрузить изображение
figure; imshow (f);title...
%вывести изображение
(['Test line']);
%в окно
f1=im2bw(f, 0.5);
%преобразовать в бинарное
figure; imshow (f1);
%вывести изображение в окно
w_45=[-1 -1 2; -1 2 -1; 2 -1 -1]; %создать маску фильтра для
%поиска линий +45
%обработать изображение
g= imfilter(double(f1), w_45); м
%фильтром
%вывести
figure;imshow (g,[ ]);
%изображение в окно
title(['Otklic']);
%вычислить модуль отклика и
g=mat2gray(abs(g));
%привести его к диапазону 0...1
%вывести изображение в окно
figure;imshow (g,[ ]);
%рассчитать профиль для 75 стр.
prof=g(75, :);
%построить профиль в окне
figure,
plot(prof),title(['Profile=75']);
%установить порог по максимуму
T = max(g(:));
%яркости
%обрезать изображение по порогу
g1 = g>= 1*T;
%вывести результат
figure;imshow (g1);
Otklic
а)
б)
12
в)
г)
Рис. 7.9 – Выделение линий направления +45 градусов
3.4 Обнаружение (выделение) контуров
Наиболее часто в задачах анализа используются методы обнаружения
контуров и краев объектов на изображении. Введем некоторые интуитивно
понятные определения. Перепад – это связное множество пикселов, лежащих на границе между двумя областями с разной яркостью. Протяженный
перепад яркости называется контуром. Границей конечной области на
изображении является замкнутый вокруг этой области контур. При поиске
таких перепадов используются производные яркости первого и второго порядка. Пояснить это можно, анализируя рис. 7.10, на котором показан участок реального изображения с вертикальным перепадом яркости от черного
к серому. Графики на этом рисунке показывают изменение яркости вдоль
строки (профиль) и поведение производных первого и второго порядков.
13
Рис. 7.10 – Перепад яркости на изображении
Анализ рис. 7.10 показывает, что точка изображения будет относиться
к перепаду яркости, если ее двумерная производная первого порядка превышает некоторый заданный порог. В то же время точку изображения можно считать перепадом, если ее вторая производная по яркости пересекается
с нулевым уровнем. Эти два критерия и лежат в основе обнаружения яркостных перепадов, т.е. таких мест на изображении, где яркость меняется достаточно быстро:
– найти места, где первая производная яркости превосходит по модулю некоторый заранее заданный порог;
– найти места, где вторая производная яркости имеет пересечения нулевого уровня.
Производные первого порядка в изображении вычисляются с помощью
градиента. Градиент изображения f(x,y) в точке (x,y) представляет собой вектор, направление которого совпадает с направлением максимальной скорости
14
изменения яркости:
Рис.7.11 – Изображение и градиент
Вычисление градиента изображения состоит в получении частных производных Gx, Gy по двум направлениям для каждой точки изображения:
 df 
Gx   dx 
∇
=
f  =
  df  .
G
y
   
 dy 
Для определения полной величины градиента эти составляющие используются совместно. Важную роль при обнаружении контуров играет модуль
градиента, который вычисляется по формуле
∇f =∇f = Gx2 + G y2 .
Модуль градиента определяет длину вектора и зависит от скорости изменения яркости, поэтому его используют для характеристики «силы края». Для
упрощения вычислений часто используется приближенное значение градиента, определяемое в соответствии с выражением
∇f= Gx + G y .
Направление градиента определяется углом между направлением вектора ∇f
и горизонтальной осью x
 Gy
 Gx
θ ( x, y ) = arctg 

.

15
Используя θ ( x, y ) можно найти направление контура в точке с координатами
(x,y). Направление контура будет перпендикулярно направлению вектора
градиента в этой точке.
Для вычисления составляющих градиента Gx, Gy для каждой точки
изображения (x,y) часто используют пространственные фильтры, маски которых показаны на рис. 7.12. Слева показаны маски для выделения градиентов
в вертикальных направлениях, а справа – в горизонтальных.
Рис. 7.12 – Маски фильтров для вычисления градиентов
В приведенной ниже программе производится вычисление градиентов
Gx , Gy и полного градиента ∇f с помощью масок Превитт в соответствие с
выражениями, обсуждаемыми выше. Для вычислений градиентов используется функция imfilter (f,w), которая была описана в разделе 3.1. Результаты
работы программы показаны на рис. 7.13.
16
%===============вычисление градиента по Превитт================
f1=imr ead('.\kurante.jpg'); %загрузить изображение
figure; imshow (f1);
%вывести изображение в окно
f1=mat2gray(f1);
%преобразовать в формат double
w1=[-1 -1 -1; 0 0 0; 1 1 1]; %создать маску фильтра Превитт
w2=[-1 0 1; -1 0 1; -1 0 1]; %создать маску фильтра Превитт
Gy=abs(imfilter(f1, w1));
%обработать изображение фильтром и
%взять модуль градиента Gy
figure;imshow(Gy,[]);
%вывести изображение
title('Gy');
Gx=abs(imfilter(f1, w2));
%обработать изображение фильтром и
%взять модуль градиента Gx
figure;imshow (Gx,[]);
%вывести изображение в окно
title('Gx');
g3=abs(Gy)+abs(Gx);
%вычислить модуль градиента
figure;imshow (g3,[]);
%вывести изображение
title('Rezalt');
Следует обратить внимание, что все вычисления в программе нужно проводить, преобразовав изображения в класс double, для того чтобы не потерять
дробные значения интенсивности пикселов
f1=mat2gray(f1).
Кроме того, при выводе изображений на экран, необходимо пользоваться
формой вывода
figure;imshow (g3,[]).
Пустые квадратные скобки позволяют вывести все получившиеся значения
интенсивности пикселов без искажений, приводя их к диапазону 0…1. При
этом значения интенсивности пикселов исходной матрицы остаются неизменными.
Следует понимать, что градиент изображения только обнаруживает области на изображении, где существуют изменения яркости. Как следует из
результатов моделирования, величина модуля градиента на различных участках изображения заметно отличается. Она является максимальной на участках, где происходит значительное изменение яркости исходного изображения. Кроме этого, как можно заметить, анализируя рис. 7.13, ширина линий
градиента довольно значительна. Это не позволяет точно локализовать границы областей. Для решения этой задачи требуется дальнейшая обработка
полученных градиентов с использованием порогового разделения, подобно17
го рассмотренному в 3.1 и 3.2, и некоторых других методов обработки для
того, чтобы сформировать бинарное изображение контуров из полутонового
изображения полученного градиента.
а)
б)
в)
г)
Рис. 7.13 – Результаты работы программы вычисления градиентов. а) –
исходное изображение; б) – модуль градиента Gy; в) – модуль градиента Gx;
г) – модуль полного градиента
В пакете Image Processing Toolbox системы MATLAB реализована
функция
BW=edge(I, method),
18
предназначеная для выделения границ на исходном полутоновом изображении I. Данная функция возвращает бинарное изображение BW такого же
размера, как исходное I. Пиксель BW(r,с) равен 1, если пиксель I(r,с) принадлежит границе. Для обнаружения границ может использоваться несколько
методов, часть из которых была описана выше и основывается на вычислении градиентов с помощью пространственных масок, показанных на рис. 3.9.
Применяемый метод задается в параметре method в виде одной из следующих строк: 'sobel', 'prewitt', 'roberts', 'log', 'zerocross', 'canny'. Если параметр
method при вызове функции опущен, то по умолчанию он полагается равным
'sobel'.
Для каждого из методов определения границ можно задать дополнительные параметры. Для этого используется одна из функций
BW=edge(I, method, thresh);
BW=edge(I, method, thresh, P),
где параметр thresh задает порог для определения того, принадлежит ли пиксель к границе, а в параметре Р передаются настройки, специфичные для
каждого из методов.
Если при вызове функции параметр thresh опущен, то значение порога
выбирается автоматически. Получить значение порога можно, дополнительно определив выходной параметр thresh:
[BW, thresh]=edge(I, method,...).
Ниже приводится применение функции edge для каждого из методов
выделения границ.
Фильтрация Собела
Функция BW=edge(I, 'sobel', thresh, direction) для определения границ
использует фильтрацию исходного изображения I фильтром Собела: пиксель считается относящимся к границе, если соответствующий ему пиксель результата фильтрации имеет значение, большее thresh. Для данного
метода можно указать дополнительный параметр direction, который опре19
деляет, какие границы будут обнаруживаться. Параметр direction может
принимать значения:
- 'horizontal' - выделение горизонтальных границ;
- ‘vertical' - выделение вертикальных границ;
- 'both' - выделение границ во всех направлениях (данное значение
используется по умолчанию, когда параметр direction не определен).
Фильтрация Превитт
Функция BW=edge(I, 'prewitt', thresh, direction) для определения границ использует фильтрацию исходного изображения I фильтром Превитт:
пиксель считается относящимся к границе, если соответствующий ему
пиксель результата фильтрации имеет значение, большее thresh. Для данного метода можно указать дополнительный параметр direction, который
определяет, какие границы будут обнаруживаться. Возможные значения
параметра direction описаны выше.
Фильтрация Робертса
Функция BW=edge(I, 'roberts', thresh) для определения границ использует фильтрацию исходного изображения I фильтром Робертса^ пиксель считается относящимся к границе, если соответствующий ему пиксель результата фильтрации имеет значение, большее thresh.
Фильтрация лаплассиан-гауссиана
Функция BW=edge(I, 'log', thresh) для определения границ использует
фильтрацию исходного изображения I фильтром лапласиан–гауссиана:
пиксель считается относящимся к границе, если соответствующий ему
пиксель результата фильтрации имеет значение, большее thresh. Для формирования маски фильтра используется функция fspecial с параметрами
sigma=2 (среднеквадратичное отклонение) и n=ceil(sigma*3)*2+1 (размер
маски). Параметр sigma можно задать в параметре функции edge:
BW=edge(I, 'log', thresh, sigma).
20
Линейная фильтрация
Функция BW=edge(I, 'zerocross', thresh, h) для определения границ
использует фильтрацию исходного изображения I линейным фильтром с
маской h: пиксель считается относящимся к границе, если соответствующий ему пиксель результата фильтрации имеет значение, большее thresh.
Фильтрация Кэнни
Функция BW=edge(I, 'canny', thresh) использует для определения границ метод Кэнни. Это достаточно сложный метод, состоящий из большого
числа этапов. Суть метода состоит в поиске локальных участков с перепадами яркости. Перепады яркости ищутся с помощью фильтрации по каждой из осей одномерным фильтром лапласиан–гауссиана. В методе Канни
для классификации перепадов на "слабые" и "сильные" используется два
порога - нижний и верхний. "Слабые" границы отмечаются в результирующем изображении, только если они соединены с "сильными". Для зашумленных изображений данный метод обеспечивает наилучшее обнаружение границ по сравнению с остальными методами функции edge, но требует существенно большего времени.
Параметр thresh может являться двухэлементным вектором. В этом
случае первый элемент вектора задает значение нижнего порога, а второй
элемент - значение верхнего порога. Если параметр thresh является скалярным значением, то thresh задает значение верхнего порога, а для нижнего порога используется значение 0.4*thresh. Если параметр thresh при
вызове функции опущен или в качестве thresh передан пустой массив, то
значения порогов определяются автоматически. В функцию
BW=edge(I, 'canny', thresh, sigma)
дополнительно передается параметр sigma, задающий среднеквадратичное
отклонение распределения Гаусса, которое используется при формировании маски фильтра, выделяющего перепады яркости.
21
Составленная на языке MATLAB программа, которая приводится ниже, позволяет провести сравнительную оценку четырех методов выделения
краев для изображения, показанного на рис. 7.14. При этом пороговые значения разделения t выбираются автоматически. Для информации они выводятся в надпись на изображении.
%===методы выделения контуров с автоматическими порогами==
f=imread('.\призма_0.tif');
%загрузить изображение
imshow (f);title ('Original'); %вывести изображение в
[g2,t2]=edge (f, 'sobel');
%выделение границ по Собелу
figure;imshow (g2); title...
%вывести результат фильтрации
(['Sobel ',' t = ',num2str(t2)]);
[g3, t3]=edge (f,'roberts');
%выделение границ по Робертсу
figure; imshow (g3);title...
%вывести результат фильтрации
(['Roberts','t = ',num2str(t3)]);
[g4,t4]=edge (f,'log');
%выделение границ по LoG
figure; imshow (g4);title...
%вывести результат фильтрации
(['LoG ',' t = ',num2str(t4)]);
[g1,t1]=edge(f, 'canny' );
%выделение границ по Канни
figure; imshow (g1);title...
(['Canny ','t = ',num2str(t1)]); %вывести результат фильтрации
Рис. 7.14 – Исходное изображение
22
а)
в)
б)
г)
Рис. 7.15 – Результат выделения краев фильтрами четырех типов с
автоматической установкой порога
Анализ рис. 7.15 показывает, что результаты выделения краев фильт-
рами четырех типов при автоматическом выборе порога, существенно отличаются. Алгоритмы фильтрации по Собелу и Робертсу явно выделяют не все
яркостные перепады. Результаты алгоритмов фильтрации лапласиангауссиана (LoG) и Canny значительно лучше. Наилучшего выделения контуров удалось добиться использованием фильтра Canny, поскольку его алгоритм использует элементы фильтра лапласиан-гауссиана, добавляя к нему
шаги, улучшающие выделение контуров.
23
Детальный анализ рисунка 7.15 г, с результами обработки фильтром
Canny показывает, что все-таки некоторые слабоконтрастные контуры остались не выделенными. На рис.7.16 приведены результаты применения этого
фильтра с измененным значением нижнего порога. Из анализа результатов
следует, что понизив нижний порог до значения 0,02 от максимального значения яркости, можно значительно улучшить выделение слабоконтрастных
границ изображения.
Рис. 7.16 – Результат выделения краев фильтром Кэнни с
разными значениями порогов
4 Задание на выполнение работы
Организовать ввод данных и вычисления согласно заданиям, приведенным ниже. Исходные изображения для выполнения работы хранятся в папке
Images_7 методических указаний.
Задание 1. Исследование поведения производных первого и второго
порядка на разрывах яркости
1) Создать и отладить программу zadanie_1, решающую следующие задачи:
а) загрузить изображение 1 из таблицы 7.1 с помощью функции
imread. Если изображение цветное, преобразовать его в полутоновое;
24
б) вывести загруженное изображение в графическое окно с помощью
функции imshow, при этом сформировать пояснительные надписи: Original.
Для того, чтобы не изменять исходное изображение при выводе на экран следует использовать функцию imshow без параметров;
в) построить и вывести в графическое окно профиль строки исходного
изображения с номером, соответствующим Вашему варианту из таблицы 7.1;
г) построить и вывести в графическое окно первую производную построенного профиля строки исходного изображения. При этом нужно учесть,
что значения производной могут быть отрицательными;
д) построить и вывести в графическое окно модуль первой производной построенного профиля строки исходного изображения;
е) построить и вывести в графическое окно вторую производную построенного профиля строки исходного изображения;
ж) построить и вывести в графическое окно модуль второй производной построенного профиля строки исходного изображения;
з) выполнить анализ построенных графиков и описать поведение первой и второй производных и их модулей на разрывах яркости.
Задание 2. Исследование алгоритма выделения изолированных точек на изображении
1) Создать и отладить программу zadanie_2, решающую следующие задачи:
а) загрузить изображение 2 из таблицы 7.1 с помощью функции
imread;
б) вывести загруженное изображение в графическое окно с помощью
функции imshow, при этом сформировать пояснительную надпись «Test dot».
Для того, чтобы не изменять исходное изображение при выводе на экран следует использовать функцию imshow без параметров;
в) обнаружить, выделить и вывести в графическое окно все изолированные точки, имеющиеся на изображении. Для этого:
25
– создать маску фильтра для обнаружения точек;
– обработать изображение этим фильтром и вычислить модуль отклика;
– вывести изображение модуля отклика в графическое окно, снабдив
его надписью «Abs otklic»;
– используя инструменты графического окна определить минимальные
и максимальные яркости изолированных точек для правильного выбора порога отсечения;
– установить порог отсечения изображения T и вывести результат в
графическое окно, снабдив его надписью «Rezalt T=XXX»;
г) результаты сохранить в файлы, проанализировать и занести в отчет;
Задание 3. Исследование алгоритма выделения тонких линий
заданного направления
1) Создать и отладить программу zadanie_3, решающую следующие задачи:
а) загрузить изображение 3 из таблицы 7.1 с помощью функции
imread;
б) вывести загруженное изображение в графическое окно с помощью
функции imshow, при этом сформировать пояснительную надпись «Test
line». Для того, чтобы не изменять исходное изображение при выводе на экран следует использовать функцию imshow без параметров;
в) обнаружить, выделить и вывести в графическое окно все линии заданного направления в соответствии с вариантом. Для этого:
– создать маску фильтра для обнаружения линий нужной ориентации;
– обработать изображение этим фильтром и вычислить модуль отклика;
– вывести изображение модуля отклика в графическое окно, снабдив
его надписью «Abs otklic»;
26
– построить профиль стоки изображения модуля отклика фильтра, выбрав строку, проходящую через интересующий участок изображения. Снабдить его надписью «Profile ZZ», где ZZ – номер строки профиля;
– установить порог отсечения по максимальному значению модуля отклика фильтра сформировать изображение и вывести результат в графическое окно, снабдив его надписью «Rezalt T=XXX»;
г) результаты сохранить в файлы, проанализировать и занести в отчет;
Варианты для выполнения заданий 1, 2, 3
№
варианта
1
2
3
4
5
6
7
8
9
10
Номер строки
профиля
зад.1
30
30
45
45
52
52
65
60
70
75
Ориентация
линий для
зад. 3
+45
-45
0
90
+45
-45
0
-45
90
0
Изображение
1
test_diff
test_diff_180
test_diff
test_diff_180
test_diff
test_diff_180
test_diff
test_diff_180
test_diff
test_diff_180
Изображение
2
test_dot_1
test_dot_2
test_dot_3
test_dot_4
test_dot_5
test_dot_6
test_dot_7
test_dot_8
test_dot_9
test_dot_10
Таблица 7.1
Изображение 3
test_line_1
test_line_1inv
test_line_2
test_line_2inv
test_line_3
test_line_3inv
test_line_1
test_line_1inv
test_line_2
test_line_2inv
Задание 4. Исследование алгоритмов выделения градиентов
1) Создать и отладить программу zadanie_4, решающую следующие задачи:
а) загрузить изображение 4 из таблицы 8.2 с помощью функции
imread. Если выяснено, что изображение цветное (состоит из трех компонент), преобразовать его в полутоновое с помощью функции rgb2gray;
б) вывести загруженное полутоновое изображение в графическое окно
с помощью функции imshow, при этом сформировать пояснительную надпись «Original». Для того, чтобы не изменять исходное изображение при выводе на экран следует использовать функцию imshow без параметров;
в) обнаружить и выделить компоненты модуля градиента и полный
градиент изображения с использованием алгоритма из таблицы 8.2 помощью
функции imfilter (см. программу «Вычисление градиента по Превитт»);
27
г) результаты фильтрации вывести в графические окна, снабдив их надписями «Алгоритм, градиент = ХХ». При выводе изображений на экран, необходимо пользоваться формой вывода
figure;imshow (g3,[]).
д) результаты сохранить в файлы, проанализировать и занести в отчет;
Задание 5. Исследование алгоритмов выделения контуров
1) Создать и отладить программу zadanie_5, решающую следующие задачи:
а) загрузить изображение 4 из таблицы 7.2 с помощью функции
imread. Если выяснено, что изображение цветное (состоит из трех компонент), преобразовать его в полутоновое с помощью функции rgb2gray;
б) вывести загруженное полутоновое изображение в графическое окно
с помощью функции imshow, при этом сформировать пояснительную надпись «Original». Для того, чтобы не изменять исходное изображение при выводе на экран следует использовать функцию imshow без параметров;
в) обнаружить и выделить контура объектов изображения с помощью
алгоритмов, указанных в таблице 7.2, в режиме автоматического определения
порогов;
г) результаты фильтрации вывести в графические окна, снабдив их
надписями «Алгоритм, порог= ХХХ»;
д) в интерактивном режиме добиться наилучшего выделения контуров
и вывести полученные изображения в графические окна, снабдив их надписями «Алгоритм, порог= ХХХ»;
е) результаты сохранить в файлы, проанализировать и занести в отчет;
28
Таблица 3.2
Варианты для выполнения задания 4, 5
№
варианта
1
2
3
4
5
6
7
8
9
10
Алгоритм
вычисления
градиента
(задание 4)
Алгоритм
обработки 1
Алгоритм обработки 2
Sobel
Roberts
Prewitt
Sobel
Roberts
Prewitt
Sobel
Roberts
Prewitt
Sobel
Sobel
Roberts
Canny
LoG
Prewitt
Sobel
Roberts
Canny
LoG
Prewitt
(задание 5)
Roberts
Canny
Roberts
Canny
LoG
Canny
Prewitt
LoG
Roberts
Canny
Алгоритм
обработки 3
Canny
Sobel
LoG
Roberts
Canny
LoG
Canny
Prewitt
Canny
Sobel
Изображение
4
Shuhovskaja
Ostankino
kremlin_1
kremlin_2
kremlin_3
kurante
bilding_1
bilding_2
objekt_1
zvezda
5 Требования к отчёту
Отчёт должен содержать:
– титульный лист с указанием названия ВУЗа, кафедры, номера и темы
лабораторной работы, а также фамилии И.О. студента, подготовившего отчёт;
– цель выполняемой работы;
– задания;
– листинги всех программ с обязательными комментариями;
– полученные на каждом этапе работы изображения;
– выводы по каждому выполненному заданию.
6 Контрольные вопросы
6.1.
Что понимается под термином анализ изображений?
6.2.
Поясните разницу в понятиях обнаружения и выделения контур-
ных признаков.
6.3.
На какие три основных типа можно разделить задачу выделения
контурных признаков?
6.4.
Поясните алгоритм пространственной фильтрации изображений.
29
6.5.
Какие характеристики может иметь фильтрующая маска?
6.6.
Поясните поведение производной первого порядка на изображе-
6.7.
Поясните поведение производной второго порядка на изображе-
6.8.
Поясните поведение модулей производных первого и второго по-
нии.
нии.
рядков на изображении.
6.9.
Расскажите о функции MATLAB, реализующей линейную про-
странственную фильтрацию.
6.10. Какие опции функции imfilter существуют? За что они отвечают?
6.11. Поясните принцип работы фильтра для выделения изолированных точек.
6.12. Поясните термины: перепад яркости, контур, граница, разрыв яркости.
6.13. Поясните понятие градиента изображения. Расскажите о способах формирования градиента.
6.14. Какая связь существует между направлением контура и направлением градиента?
6.15. Что понимается под термином «сила края»?
6.16. Поясните принцип работы фильтра для выделения линий заданного направления.
6.17. Расскажите об основных алгоритмах выделения краев.
6.18. Поясните принцип формирования лапласиана. Для чего совместно с лапласианом используется фильтрация Гаусса?
6.19. В чем заключается принцип порогового разделения?
6.20. Расскажите об алгоритме фильтрации Кэнни.
7 Рекомендуемая литература
Дьяконов, В. П. MATLAB 6.5 SP1/7/7 SP1 + Simulink 5/6. Работа с изображениями и видеопотоками [Текст] / В. П. Дьяконов. – М.: СОЛОН30
Пресс, 2005. – с.206…209, 257.
Гонсалес, Р. Цифровая обработка изображений в среде MATLAB
[Текст] / Р. Гонсалес, Р. Вудс, С. Эддинс. – М.:Техносфера, 2006. –
с.103…121, 154…157
Солонина, А. И. Цифровая обработка сигналов. Моделирование в
MATLAB [Текст] / А. И. Солонина, С. М. Арбузов. – СПб.: БХВ-Петербург,
2008. – 816 с.
31
Лабораторная работа №8
Исследование алгоритмов повышения резкости изображений
1 Цель работы
• изучение вопросов оценки качества изображений;
• исследование алгоритмов повышения резкости изображений путем
моделирования в среде MATLAB;
• получение навыков практического программирования средствами
MATLAB.
2 Подготовка к работе
• Ознакомиться с теоретическим материалом и рекомендованной литературой.
• Подготовить ответы на контрольные вопросы.
3 Теоретический материал
3.1 Качество цифровых изображений
Известно, что на качество цифрового изображения оказывают влияние
целый ряд его параметров:
• разрешение (image resolution);
• яркость (brightness);
• контрастность (contrast);
• четкость (image clarity);.
• отношение сигнал/шум (signal to noise ratio – SNR).
Разрешение изображения – это число элементов изображения (пикселов, точек), приходящееся на единицу его длины. Разрешение может измеряться в пикс/мм, пикс/см, пикс/дюйм (pixel per inch – ppi), точек/дюйм (dot
per inch – dpi). Разрешение определяет минимально возможный размер объекта, который может быть обнаружен на изображении. Очевидно, что объекты с размерами менее одного пиксела на изображении не обнаруживаются.
32
Например на рис. 8.1(справа), тонкие линии в центральной части изображения не отображаются, либо оказываются искаженными из-за низкого разрешения.
Рис. 8.1 – Изображение с высоким и низким разрешением
Разрешение изображения зависит от характеристик аппаратуры, с помощью которой оно создавалось и при фиксированных геометрических размерах определяется пиксельными размерами изображения, т.е. числом пикселей по горизонтали и вертикали. Для цифровых фото и видеокамер пиксельный размер зависит от числа пикселей их светочувствительных матриц.
Яркость характеризует интенсивность отраженного или излучаемого
деталями изображения света и является энергетической характеристикой.
Единицей измерения яркости служит кд/м2.
Яркость цифрового изображения на экране монитора определяется
интенсивностью свечения его пикселов. Реальную яркость, излучаемую экраном, можно измерить люксметром. Однако при анализе цифровых изображений, получаемых на экране монитора, такой способ практически не используется. При этом считается, что яркость пикселов пропорциональна величине сигнала в каждом элементе изображения. Таким образом, реальные
33
значения яркости заменяются на интенсивности возбуждающего сигнала. Величина интенсивностей зависит от класса изображения: для изображений
класса double она лежит в диапазоне 0…1, для изображений класса uint8 –
0…255. При этом белым пикселам изображения соответствует максимальная
яркость, черным – минимальная. Средняя яркость изображения определяется как среднее арифметическое интенсивности всех пикселов и часто называется постоянной составляющей изображения.
Контрастность, в общем случае, характеризует диапазон изменения
яркости различных участков изображения. Для оценки контраста используется несколько способов. Например, максимальный контраст измеряется в
соответствие с выражением
K max = Lmax / Lmin ,
где
Lmax, Lmin – максимальная и минимальная яркости элементов в изобра-
жении.
Из-за особенностей анализа изображений следует различать контраст
крупных деталей изображения и контраст мелких деталей изображения.
Из-за технических особенностей формирования цифровых изображений контраст мелких деталей всегда меньше контраста крупных деталей.
Для сравнительной оценки изображений, загруженных в систему
MATLAB, имеет смысл использовать выражение для нормированной оценки контраста:
=
K ( Lmax − Lmin ) / L0 min .
Здесь L0max – максимально достижимая интенсивность пикселов в графическом окне MATLAB. При этом контраст является безразмерной величиной и
лежит в диапазоне 0…1.
Четкость изображения характеризуется максимально возможным
количеством и качеством мелких деталей, различимых в изображении, при
условии, что эти мелкие детали в изображении имеются. Недостаточная четкость приводит к эффекту размытости, что в конечном итоге сказывается на
34
снижении информативности изображения. Иногда понятие четкости разделяют на детальность (качество воспроизведения мелких деталей) и резкость. Как было описано выше, потенциальная способность воспроизводить
мелкие детали определяется разрешающей способностью изображения. Однако реальная разрешающая способность, например, при плохой фокусировке или плохом объективе камеры, может оказаться значительно ниже максимально возможной. На рис. 8.2 показано изображение с плохой и хорошей
детальностью.
Рис. 8.2 – Изображение с четкими и размытыми мелкими деталями
Резкость изображения (image sharpness) определяется степенью размытости границы между двумя соседними участками изображения с различной яркостью. Объективно резкость можно оценить скоростью изменения
яркости в направлении, перпендикулярном границе участка изображения (см.
градиент). На визуальное восприятие резкости более сильное влияние оказывают границы крупных деталей изображения.
На рис. 8.3 показаны резкое и размытое изображения одного и того же
объекта.
Отношение сигнал/шум. Одной из основных причин, влияющих на
качество изображения, является шум. Шум присутствует в любом изображении. Причины его появления кроются в специфике формирования изображений фото или видеокамерой, сканером, устройством воспроизведения или
печати на носителе. Существует несколько важных типов шумов, которые
35
различаются природой возникновения и визуальным проявлением на изображениях (См. ЛР№6).
Рис. 8.3 – Резкое и размытое изображение идеального перепада
В общем, влияние шума проявляется в изменении истинных значений
яркости (цвета) пикселов изображений. При этом значения яркости L можно
рассматривать как случайные величины, которые характеризуются функцией
плотности распределения вероятностей p(L). На рис. 8.4 показано влияние
аддитивного шума Гаусса на изображение. Такой шум характеризуется равномерным спектральным распределением, аддитивным воздействием на яркость пикселов (суммируется с истинными значениями), а его плотность распределения вероятности p(L) описывается функцией Гаусса.
Рис. 8.4 – Исходное изображение и изображение с 10% шума Гаусса
36
Анализируя рис. 8.4 можно видеть, что наличие шума влияет не только
на различимость мелких деталей, но и на количество различимых градаций в
крупных.
Зная функцию плотности распределения вероятностей можно вычислить среднее значение и среднеквадратичное отклонение шумовых составляющих. Количественно уровень шума можно оценить, вычисляя отношение
сигнал/шум (Signal Noise Ratio – SNR).
3.2 Повышение резкости изображений
Для повышения резкости изображений с использованием обработки в
пространственной области существуют несколько способов, основанных на
увеличении крутизны перепадов яркости, которые оказались размытыми.
Нерезкое маскирование (Unsharping masking). Процедура нерезкого
маскирования заключается в вычитании из изображения его расфокусированной копии. Эта расфокусированная копия называется нерезкой маской.
Такой способ используется в фотографии для улучшения снимков, но его с
успехом используют и для обработки цифровых изображений. Аналитически
процесс нерезкого маскирования описывается выражением
fs=
( x, y ) f ( x, y ) − f ( x, y ) ,
(8.1)
где fs ( x, y ) – улучшенное изображение, f ( x, y ) – исходное изображение, а
f ( x, y ) – расфокусированная копия исходного (нерезкая маска).
Для практической реализации нерезкого маскирования используют разностное изображение fs ( x, y ) , полученное при вычитании из исходного изображения расфокусированного, в соответствии с (8.1). При этом наибольшая
разность будет наблюдаться в областях, где несовпадение изображений будет
наибольшим. Поскольку при расфокусировке наибольшее размытие происходит на резких переходах яркости, то именно в их окрестностях разностное
изображение будет иметь максимальные изменения. В то же время на участ37
ках с постоянной или медленно меняющейся яркостью его изменения отсутствуют. Поэлементное сложение исходного изображения с разностным будет
увеличивать скорость изменения яркости на переходах от темного к светлому
и от светлого к темному:
fr=
( x, y ) f ( x, y ) + K * fs ( x, y ) .
(8.2)
При этом степень коррекции резкости можно регулировать изменяя коэффициент К, который меняет долю сигнала коррекции в результирующем изображении.
Приводимая ниже программа реализует описанное выше повышение резкости методом нерезкого маскирования.
1
%=====Unsharp_masking =========================================
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clc, clear;
f=im2double(imread('.\klin.tif'));
figure,imshow(f);title('Original');
h=fspecial('gaussian',[7],3.5);
fm=imfilter(f, h,'replicate');
figure,imshow(fm,[]);title('mask');
fs=f-fm;
figure,imshow(fs,[]);
title('Difference');
fr=f+0.8*fs;
figure,imshow (fr);title('Rezalt');
%=======построим профили строки для
[m n v]=size(f);
z=round(m/2);
figure; imshow
(fr),title('Rezalt'); h= gcf;
figure(h);
19
20
21
22
proff=f(z, :);
plot(proff*2,'b','lineWidth',1);
title('Profiles');
xlim([1 n]);
23
24
25
26
27
28
29
30
31
hold on;
proffm=fm(z, :);
plot(proffm*2,'g','lineWidth',1);
proffs=fs(z, :);
plot(proffs*4,'k','lineWidth',1);
proffr=fr(z, :);
plot(proffr*2,'r','lineWidth',1);
zoom on;
hold off;
%загрузить исходное изображение
%вывести исходное изображение в окно
%создать фильтр Гаусса
%расфокусировать изображение
%вывести расфокусированное
%найти разностное изображение
%вывести разностное изображение
%выполнить коррекцию резкости
%вывести результат в окно
анализа результатов========
%определить размеры изображения
%найти среднюю строку;
%создать копию текущего окна
%определить текущий дескриптор
%гр.окна и заменить его на новое с
характеристиками текущего
%рассчитать профиль для исходного
%построить профиль для исходного
%вывести надпись
%установить диапазон значений по оси
%Х
%разрешить добавлять графики
%рассчитать профиль маски
%построить профиль маски
%рассчитать профиль разности
%построить профиль разности
%рассчитать профиль результата
%построить профиль результата
%разрешить изменение масштаба
38
Программа производит загрузку исходного тестового изображения градационного клина, формирует расфокусированную копию этого изображения
с помощью размытия фильтром Гаусса и формирует разностное изображение, которое используется для коррекции резкости fs=f – fm.
Коррекция производится в соответствии с выражением (8.2), при К=0.8
fr = f + 0.8*fs.
Изображения, формируемые программой, выводятся на экран с соответствующими надписями.
Во второй части программы производится построение профилей средних строк для всех сформированных программой изображений. Анализ выводимых изображений (рис. 8.5) и построенных профилей (рис. 8.6), позволяет наглядно оценить и глубже понять принцип описанного способа коррекции резкости.
39
Рис. 8.5 –Изображения, полученные в программе Unsharp_masking
Рис. 8.6 – Профили средних строк изображений, полученных в программе
Unsharp_masking
Из увеличенного фрагмента профилей на рис. 8.6 видно, что скорость
изменения яркости скорректированного изображения, по сравнению с исходным, увеличилась, что сказалось на повышении резкости.
Если использовать терминологию обработки изображений в частотной
области, то получение разностного изображения с помощью нерезкой маски
эквивалентно выделению верхних пространственных частот. Верхние пространственные частоты отвечают за формирование резких изменений яркости и мелких детали изображения. Поэтому добавление верхних частот к исходному изображению часто называют фильтрацией с подъемом верхних
частот.
Повышение резкости с помощью фильтра Лапласа. Кроме использования нерезкой маски выделить быстрые изменения яркости на изображениях можно с помощью производных первого и второго порядков (см. лабора40
торную работу №7). Для получения производных второго порядка применяется фильтр Лапласа, работа которого описывается выражением, называемым
лапласианом:
d 2 f ( x, y ) d 2 f ( x, y )
=
∇ f
+
.
(8.3)
dx 2
dy 2
Наиболее часто для реализации пространственного фильтра Лапласа
2
используются маски, показанные на рис. 8.7.
а)
б)
в)
г)
Рис. 8.7 – Маски фильтра Лапласа
Свертка этих масок а и б с изображением формирует отклик в соответствии с
выражением
∇ 2 f =[ f ( x + 1, y ) + f ( x − 1, y ) + f ( x, y + 1) + f ( x, y − 1)] − 4 f ( x, y ) ,
которое описывает формирование вторых производных на цифровом изображении. Отклик для масок в и г дополнится еще четырьмя слагаемыми,
которые будут учитывать диагональные направления. Поскольку сумма коэффициентов этих масок равна нулю, то на участках с равномерной яркостью
отклик будет иметь нулевое значение, в то время как на участках с изменяющейся яркостью величина отклика отличается от нулевого значения. Это отличие будет увеличиваться по мере возрастания скорости изменения яркости.
Коррекция резкости производится путем добавления отклика, формируемого фильтром Лапласа к исходному изображению в соответствии с выражениями:
2
 f ( x, y ) − ∇ f ( x, y ), если w(0,0) < 0
g ( x, y ) = 
2
 f ( x, y ) + ∇ f ( x, y ), если w(0,0) ≥ 0
(8.4)
41
Программа «Sharpening_Laplasian», реализующая описанный способ
повышения резкости, приведена ниже.
1
%=====
2
3
4
5
6
7
8
clc, clear;
f=imread('.\ТИТ_1.tif');
%загрузить изображение
f=im2double (f);
%преобразовать в формат double
imshow (f,[]),title('Original');
%вывести изображение в окно
w4=[0 1 0; 1 -4 1; 0 1 0];
%создать маску лапласиана
l4=imfilter (f, w4, 'replicate'); %вычислить лапласиан
figure; imshow...
%вывести изображение
(l4,[]),title('Laplasian');
g4 = f-imfilter (f, w4,...
%выполнить повышение резкости
'replicate');
figure; imshow
%вывести изображение
(g4),title('After.. correction');
%=======построим профили строки для анализа результатов========
[m n v]=size(f);
%определить размеры изображения
z=70;
%выбрать номер строки
figure; imshow (g4),title...
%создать копию текущего
('After correction');
%окна
h= gcf;
%определить текущий дескриптор
%графического окна
%и заменить его на новое для профи
figure(h);
%лей с характеристиками текущего
%рассчитать профиль для строки z
proff=f(z, :);
%исходного и построить его
plot(proff,'g','lineWidth',1);
%вывести надпись
title('Profiles');
%установить диапазон значений по оси
xlim([1 n]);
%Х равным числу столбцов изображения
%разрешить добавлять графики
hold on;
%рассчитать профиль для строки z
profg4=g4(z, :);
%скорректированного и построить его
plot(profg4,'r','lineWidth',1);
%разрешить интерактивное изменение
zoom on;
%масштаба
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sharpening_Laplasian=====================================
25 hold off;
Программа загружает исходное изображение из файла и выводит его на
экран (рис. 8.8), с соответствующей надписью (строки 3–5). В строке 6 формируется маска фильтра Лапласа w4 в соответствие с рис. 8.7 (а), которая используется функцией imfilter для вычисления лапласиана от исходного изображения (строка 7). В строке 8, сформированный лапласиан (отклик фильтра) выводится на экран для анализа (рис. 8.8). Анализ показывает, что в областях с постоянной яркостью значения отклика фильтра равны нулю, а в областях, где яркость изменяется, значения отклика принимают и отрицатель42
ные и положительные значения.
Рис. 8.8 –Исходное изображение и его лапласиан
43
Коррекция резкости происходит в соответствие с выражением (8.4), согласно которому к исходному изображению добавляется значение отклика
фильтра Лапласа (строка 9). Поскольку значение центрального элемента маски отрицательно, то значение отклика вычитается из исходного изображения.
Результат коррекции выводится на экран строкой 10 и приведен на рис. 8.9.
Рис. 8.10 – Изображение после повышения резкости
В остальных строках программы производится формирование графического
окна для построения профилей строк исходного и скорректированного изображений. Для удобства анализа размеры этого окна устанавливаются равными размеру ранее сформированных окон (строки 14–16). Профили яркости
для 70 строки изображений приведены на рис. 8.11. Видно, что интенсивность сигнала на резких переходах увеличилась. Особенно это заметно на
нижнем графике, где показан увеличенный фрагмент профилей. Анализ рис.
8.10 и 8.11 позволяет утверждать, что резкость изображения после выполненной высокочастотной коррекции фильтром Лапласа повысилась.
44
Рис. 8.11 – Профили яркости для 70 строки исходного (зеленый) и
скорректированного (красный) изображений. Внизу – увеличенный
фрагмент
45
4 Задание на выполнение работы
Организовать ввод данных и вычисления согласно заданиям, приведенным ниже. Исходные изображения для выполнения работы хранятся в папке
Images_8 методических указаний.
Задание 1. Исследование алгоритма повышения резкости методом
нерезкой маски
1) Создать и отладить программу zadanie_8_1, решающую следующие задачи:
а) загрузить изображение 1 из файла, указанного в таблице 8.1 с вариантами заданий, с помощью функции imread и вывести загруженное изображение в графическое окно с помощью функции imshow, при этом сформировать пояснительные надписи «Original». Для того, чтобы не изменять исходное изображение при выводе на экран следует использовать функцию imshow
без параметров;
б) создать расфокусированную копию исходного изображения (нерезкую маску) и вывести ее в графическое окно с поясняющей надписью;
в) получить разностное изображение и вывести его в графическое окно
с поясняющей надписью;
г) выполнить коррекцию резкости исходного изображения в соответствие с выражением (8.2). Вывести скорректированное изображение в графическое окно с поясняющей надписью. Добиться наилучшего результата подбором коэффициента К, изменяющего долю корректирующего сигнала;
д) рассчитать и вывести в одно графическое окно профили для заданного номера строк всех четырех полученных изображений (см. таблица 8.1).
2) Проанализировать результаты и сделать выводы.
Задание 2. Исследование алгоритма повышения резкости с помощью фильтра Лапласа
1) Создать и отладить программу zadanie_8_2, решающую следующие задачи:
46
а) загрузить изображение 2 из файла, указанного в таблице 8.1 с вариантами заданий, с помощью функции imread и вывести загруженное изображение в графическое окно с помощью функции imshow, при этом сформировать пояснительные надписи «Original». Для того, чтобы не изменять исходное изображение при выводе на экран следует использовать функцию imshow
без параметров;
б) создать маску фильтра Лапласа, согласно варианта задания. Обработать исходное изображение созданным фильтром и вычислить отклик (лапласиан). Вывести полученный отклик фильтра в графическое окно с поясняющей надписью;
в) выполнить коррекцию резкости исходного изображения в соответствие с выражением (8.4) и вывести результирующее изображение в графическое окно с поясняющей надписью;
г) рассчитать и вывести в одно графическое окно профили для заданного номера строк исходного и скорректированного изображений (см. таблица
8.1).
2) Результаты сохранить в файлы, проанализировать, сделать выводы и
занести в отчет.
Таблица 8.1
Изображение 1
№
варианта
1
2
3
4
5
6
7
8
9
10
Варианты для выполнения задания 1 и 2
Номер Изображение 2
строки
профиля
задание 1
aero_1_ok
aero_2_ok
aero_3_ok
bridge_ok
hole_ok
kosmos_ok
merkury_1_ok
merkury_2_ok
micro_1_ok
micro_3_ok
200
150
384
350
500
250
385
300
128
512
Маска
фильтра
Лапласа
(Рис.8.7)
задание 2
micro_4_ok
а
moscowmap_ok
б
planeta_1_ok
в
pollen_ok
г
zamok_ok
б
zvezda_ok
в
neuron_ok
г
road_ok
а
venera_1_ok
в
zamok_2_ok
г
Номер
строки
профиля
200
230
300
160
340
325
370
300
100
450
47
5 Требования к отчёту
Отчёт должен содержать:
– титульный лист с указанием названия ВУЗа, кафедры, номера и темы
лабораторной работы, а также фамилии И.О. студента, подготовившего отчёт;
– цель выполняемой работы;
– задания;
– листинги всех программ с обязательными комментариями;
– полученные на каждом этапе работы изображения;
– выводы по каждому выполненному заданию.
6 Контрольные вопросы
6.1.Какие характеристики определяют качество изображений? Поясните механизм влияния каждой из них на качество.
6.2.Какая характеристика определяет динамический диапазон изображения?
6.3.Как можно измерить яркость формируемого на экране изображения?
6.4. Объясните различия между понятиями средней яркости и детальной яркости.
6.5.Объясните различия между понятиями контраст изображения, контраст
крупных деталей, контраст мелких деталей.
6.6.Поясните алгоритм пространственной фильтрации изображений.
6.7.Какие характеристики может иметь фильтрующая маска?
6.8.Какими функциями MATLAB можно увеличить контраст изображений?
6.9.Будет ли отношение сигнал/шум одинаковым для различных областей
изображения?
6.10. Как можно объективно оценить четкость и резкость изображений?
6.11. Поясните поведение производной первого порядка и ее модуля на изображении.
6.12. Поясните поведение производной второго порядка и ее модуля на изображении.
48
6.13. Поясните понятие градиента изображения. Расскажите о способах
формирования градиента.
6.14. Расскажите о функции imfilter MATLAB, реализующей пространственную фильтрацию.
6.15. Какие опции функции imfilter существуют? За что они отвечают?
6.16. Поясните общий принцип повышения резкости изображений.
6.17. Поясните алгоритм повышения резкости методом нерезкой маски.
6.18. Как можно получить размытую копию изображения?
6.19. Поясните алгоритм повышения резкости с помощью фильтра Лапласа.
6.20. Как можно построить профили яркости строк или столбцов изображений в одном графическом окне?
7 Рекомендуемая литература
Дьяконов, В. П. MATLAB 6.5 SP1/7/7 SP1 + Simulink 5/6. Работа с изображениями и видеопотоками [Текст] / В. П. Дьяконов. – М.: СОЛОНПресс, 2005. – с.206…209, 257.
Гонсалес, Р. Цифровая обработка изображений в среде MATLAB
[Текст] / Р. Гонсалес, Р. Вудс, С. Эддинс. – М.:Техносфера, 2006. –
с.103…121
Солонина, А. И. Цифровая обработка сигналов. Моделирование в
MATLAB [Текст] / А. И. Солонина, С. М. Арбузов. – СПб.: БХВ-Петербург,
2008. – 816 с.
49
Download