Домашняя работа 2

advertisement
Домашнее задание 2
Студента(-ки) Иванова Ивана Петровича, группа АБВ123
Инструкции по оформлению:
1. Пользуйтесь этим файлом, заменив имя вверху (и в названии файла) на Ваше.
2. В пунктах, где оставлены пустые поля, впишите Ваши решения и ответы. Размер поля
никак не соответствует ожидаемому размеру решения: пишите всё необходимое.
Все решения (кроме применения программы BF.m в последнем разделе) должны быть
сделаны «вручную», т.е без применения каких-либо программ.
3. Помимо данного файла, Вы должны будете сдать программу фильтра BF.m (см. последнее
задание). Упакуйте все файлы (выполненное задание в этом файле, и BF.m) в .zip (с Вашим
именем латиницей в названии), и отправьте мне.
4. Задачи со * - бонусные. Рекомендую интересующимся и всем, у кого были проблемы с
первой домашней работой, для дополнительных баллов.
1 Преобразование Радона (задача из лекции)
4
2
x1
x2
x3
x4
Рис. 2
4
2
3
x1
x2
3
3
x3
x4
3
3
Рис. 1
Рассмотрим задачу нахождения четырех неизвестных xi из их «рентген-проекций», определяемых
как суммы (например, x1+ x3=4).
A. Найдите значения xi на Рис. 2, используя x4 как независимую переменную:
B. Назовем решение задачи на Рис. 2 гладким, если значения xi минимально отклоняются от
своего среднего:
x
1
4
4
x
i
1
4
E
 x  x 
2
i
 min
1
Подобное условие гладкости может быть рассмотрено как полезное на практике условие
подавления нежелательных ошибок (шумов) в изображении.
Найдите xi в случае гладкого решения (напишите решение и ответ ниже):
C. Найдите решение в А. при добавлении еще одной «рентгеновской» проекции x2+ x3=3 (Рис.
1):
D. Что можно сказать о решениях в B. и C., какое из них будет более предпочтительным для
применения в клинике (и почему)?
2 Формула билатерального фильтра
Как было определено на лекции, формула применения билатерального фильтра находится как
решение Y следующей задачи:
E ( y) 

n


( xn  yn ) 2  
ukn ( yk  yn ) 2   min


kN r



(Eq. 1)
где зашумленное изображение X (с яркостями пикселей xi) приближается более гладким
изображениям Y (с яркостями пикселей yi).
Nr – окрестность радиуса r с центром в пикселе yn ( dist( yk  yn )  r ), коэффициенты ukn – некоторые
постоянные.
A. Найдите отсюда yn - т.е. покажите, что уравнения для его вычисления имеет вид
w
1 w
xn 
yn 
nk y k
Nr
(Eq. 2)
nk
Nr
B. Выразите коэффициенты wkn в ((Eq. 2) через ukn и λ в ((Eq. 1):
C. Как мы обсуждали, билатеральный фильтр вычисляется итерационно:
y n(0)  xn ,
w y
1 w
xn 
y n( M 1) 
(M )
nk k
Nr
nk
Nr
где М – номер итерации. Докажите, что такой фильтр инвариантен относительно равных
смещений яркости (shift-invariant): если мы увеличим все исходные xn на некоторую
постоянную δ, то все ynM увеличатся на нее же:
В чем, по-вашему, заключается практическое значение (и полезность) этого свойства?
D. *
Можете ли Вы предложить не-итерационное (но применимое на практике, т.е.
(Eq. 3)
эффективное) решение (Eq. 2), вместо (Eq. 3)? Явные решения системы (Eq. 2) не
предлагать: как было отмечено, у реальных изображений число точек (пикселей) может
достигать миллионов, и прямое обращение матрицы «миллион на миллион»
неосуществимо практически.
3 Применение билатерального фильтра
A. Напишите Matlab-программу BF.m, применяющую билатеральный фильтр для удаления
шума из томографического изображения. Используйте в ней окрестность Nr радиуса r=6, и
  yn  yk 2
wnk 
e
2
1  dist 2  yn  yk 
где dist обозначает расстояние между пикселями yn и yk на плоскости. Используйте σ=200.
В качестве исходного изображения используйте DICOM-файл Low (снимок при низкой
радиационной дозе), а в качестве идеала, к которому надо стремиться при фильтровании – файл
High. Я прилагаю набросок программы в файле BF0.m, где уже определена функция LoadRData для
загрузки изображения. Вам надо написать функцию BFilter(L), которая берет изображение L,
фильтрует его, и возвращает как отфильтрованное F= BFilter(L). В качестве L берем Ims(:,:,2), а
отфильтрованное F сохраняем в Ims(:,:,3). Ims(:,:,1) содержит качественный сномок High.
Замените в BF0.m места с “TODO” на Ваш код. Не забудьте переименовать BF0.m в BF.m.
B. Пользуясь данной программой, профильтруйте изображение, используя одну итерацию в
(Eq. 3), и три разных значения λ: {0.01, 0.5, 2}. Программа должна показать три снимка
(High, отфильтрованный Low, Low) в один ряд. Скопируйте этот результат (три
профильтрованных снимка, показанных вместе в один ряд) как скриншот1 ниже, для
соответствующих значений λ:
a. λ=0.01
b. λ=0.5
1
Скриншот должен включать только сам снимок, и ничего более. Размер его настройте так, чтобы три
снимка занимали всю ширину страницы (между полями).
c. λ=2
C. Как отличаются эти три снимка по уровню гладкости их яркостей? Как это связано с
регуляризационным параметром λ в исходной постановке задачи ((Eq. 1)?
D. Пользуясь результатами с тремя λ выше, постарайтесь визуально подобрать оптимальное λ
так, что отфильтрованный с ним снимок Low стал бы как можно ближе к High. Сделайте это
как минимум одним из двух способов:
a. Меняя значение λ в BF.m, и сравнивая снимки визуально
b. * Реализовав некий численный метод для вычисления оптимального λ (включите
его код в BF.m, и опишите принцип его действия в поле ниже). Подсказка –
используйте качественное изображение High, и постарайтесь Вашим численным
методом найти такое λ, чтобы шум в отфильтрованном Low стал таким же, как в
High.
Независимо от способа a. или b., скопируйте ниже полученные при найденном Вами
оптимальном λ снимки (три скриншота в формате задания 3B выше)
λ=__________________:
E. *
Расчет билатерального фильтра занимает значительное время. Я поместил в программу
tic-toc для показа времени, но снимок маленький, и на больших данных все будет
значительно медленнее. Предложите какой-нибудь способ ускорения вычисления
значений фильтра.
Download