Если предположить, что переменная d1
хранит то, что является вероятным представлением двойной точности (значения от 0 до 1) исходного изображения с интенсивностью серого , на котором выполняется операция, то последние 5 строк повернут этоИзображение в градациях серого в 3-D RGB-изображение iout
, которое выглядит так же, как исходное изображение в градациях серого, за исключением того, что контуры будут накладываться на изображение в голубом цвете.
Вот пример,используя изображение 'cameraman.tif'
, которое входит в состав MATLAB Toolbox Toolbox :
d1 = double(imread('cameraman.tif'))./255; % Load the image, scale from 0 to 1
subplot(2, 2, 1); imshow(d1); title('d1'); % Plot the original image
d = edge(d1, 'canny', .6); % Perform Canny edge detection
subplot(2, 2, 2); imshow(d); title('d'); % Plot the edges
ds = bwareaopen(d, 40); % Remove small edge objects
subplot(2, 2, 3); imshow(ds); title('ds'); % Plot the remaining edges
iout = d1;
BW = ds;
iout(:, :, 1) = iout; % Initialize red color plane
iout(:, :, 2) = iout(:, :, 1); % Initialize green color plane
iout(:, :, 3) = iout(:, :, 1); % Initialize blue color plane
iout(:, :, 2) = min(iout(:, :, 2) + BW, 1.0); % Add edges to green color plane
iout(:, :, 3) = min(iout(:, :, 3) + BW, 1.0); % Add edges to blue color plane
subplot(2, 2, 4); imshow(iout); title('iout'); % Plot the resulting image
И вот рисунок, который создает приведенный выше код:
Как это работает ...
Создание изображения iout
не имеет ничего общего с алгоритмом обнаружения края.Это просто простой способ отобразить края, найденные в предыдущих шагах.2-мерное изображение с интенсивностью серого не может отображать цвет, поэтому, если вы хотите добавить цветные контурные линии к изображению, вы должны сначала преобразовать его в формат, который позволит вам показать цвет: либо индексированное изображение (по моему опыту это немного сложнее) или трехмерное RGB-изображение (третье измерение представляет красный, зеленый и синий цветовые компоненты каждого пикселя).
Репликация в оттенках серогоизображение 3 раза в третьем измерении дает нам трехмерное изображение RGB, которое изначально все еще содержит серые цвета (равное количество красного, зеленого и синего на пиксель).Однако, изменяя определенные пиксели каждой цветовой плоскости, мы можем добавить цвет к изображению.При добавлении логической маски ребер BW
(те, где ребра находятся, а в другом месте нули) к зеленым и синим цветным плоскостям, те пиксели, где были найдены контуры, станут голубыми.Вызов функции min
гарантирует, что результат добавления изображений никогда не приведет к тому, что значение цвета пикселя превысит значение 1.0
, которое является максимальным значением, которое элемент должен иметь для двойной точностиТрехмерное изображение RGB.
Следует также отметить, что код для создания трехмерного изображения RGB можно упростить до следующего:
iout = d1;
iout(:, :, 2) = min(d1+ds, 1.0);
iout(:, :, 3) = min(d1+ds, 1.0);