Как окрасить края после использования фильтра Собеля?

Я использую фильтр Собеля для обнаружения краев. Как проиллюстрировать направление градиента с помощью цветового кодирования. Например, горизонтальные края с синим и вертикальные края с желтым?

Спасибо.


person indu    schedule 08.05.2015    source источник


Ответы (1)


Поскольку вы можете указать, хотите ли вы обнаружить горизонтальную или вертикальную кромку (отметьте здесь), вы можете выполнить 2 операции фильтрации (одну по горизонтали и другую по вертикали) и сохранить каждое полученное изображение, а затем соединить их, чтобы сформировать окончательное 3-канальное изображение RGB.

Цветовой код RGB для желтого — [1 1 0], а для синего — [0 0 1], поэтому в вашем случае изображение вертикального края будет занимать первые 2 канала, тогда как изображение горизонтального края будет занимать последний канал.

Пример:

clear
clc
close all

A = imread('circuit.tif');

[r,c,~] = size(A);

EdgeH = edge(A,'Sobel','Horizontal');
EdgeV = edge(A,'Sobel','Vertical');

%// Arrange the binary images to form a RGB color image.
FinalIm = zeros(r,c,3,'uint8');

FinalIm(:,:,1) = 255*EdgeV;
FinalIm(:,:,2) = 255*EdgeV;
FinalIm(:,:,3) = 255*EdgeH;

figure;

subplot(1,2,1)
imshow(A)

subplot(1,2,2)
imshow(FinalIm)

Выход:

введите здесь описание изображения

person Benoit_11    schedule 08.05.2015
comment
Привет! Большое вам спасибо. Это сработало отлично. Но если сказать, что я также извлек диагональный край и нарисовал другой цвет. Что мне делать? - person indu; 08.05.2015
comment
Очень рад помочь! Чтобы отобразить другой набор ребер с другим цветом, вам нужно будет поиграть с красным, зеленым и синим каналами FinalIm. Пожалуйста, взгляните на мой ответ в конце эта запись, в которой пользователь выбирает цвет для заливки области. Та же методология применима и к вам; в вашем текущем случае mask будет каждое изображение вертикального, горизонтального и диагонального края. - person Benoit_11; 08.05.2015