В этом примере показано, как использовать ведомый фильтр, чтобы сглаживать изображение, уменьшая шум, при сохранении ребер. Пример использует два изображения той же сцены, одного взятого с флэш-памятью и другим без флэш-памяти. Версия без флэш-памяти сохраняет цвета, но является шумной из-за слабого освещения. Этот пример использует версию, взятую с флэш-памятью в качестве изображения руководства.
Считайте изображение, которое вы хотите отфильтровать в рабочую область. Этот пример использует изображение некоторых игрушек, взятых без флэш-памяти. Из-за слабого освещения изображение содержит много шума.
A = imread('toysnoflash.png'); figure; imshow(A); title('Input Image - Camera Flash Off')
Считайте изображение, которое вы хотите использовать в качестве изображения руководства в рабочую область. В этом примере изображение руководства является изображением той же сцены, взятой с флэш-памятью.
G = imread('toysflash.png'); figure; imshow(G); title('Guidance Image - Camera Flash On')
Выполните ведомую операцию фильтрации. Используя imguidedfilter
функция, можно задать размер окружения, используемого в фильтрации. Значением по умолчанию является квадрат 5 на 5. Этот пример использует 3х3 окружение. Можно также задать объем сглаживания выполняемого фильтром. Значение может быть любым положительным числом. Один способ приблизиться к этому состоит в том, чтобы использовать значение по умолчанию сначала и просмотреть результаты. Если вы хотите меньше сглаживания и больше сохранения ребра, используйте нижнее значение в этом параметре. Для большего количества сглаживания используйте более высокое значение. Этот пример устанавливает значение параметра сглаживания.
nhoodSize = 3; smoothValue = 0.001*diff(getrangefromclass(G)).^2; B = imguidedfilter(A, G, 'NeighborhoodSize',nhoodSize, 'DegreeOfSmoothing',smoothValue); figure, imshow(B), title('Filtered Image')
Исследуйте завершение области оригинального изображения и сравните его с отфильтрованным изображением, чтобы видеть эффект этого фильтра сглаживания сохранения ребра.
figure; h1 = subplot(1,2,1); imshow(A), title('Region in Original Image'), axis on h2 = subplot(1,2,2); imshow(B), title('Region in Filtered Image'), axis on linkaxes([h1 h2]) xlim([520 660]) ylim([150 250])