假设变量存储的可能是操作的原始灰度强度图像d1
的双精度表示(值介于 0 和 1 之间),那么最后 5 行将把该灰度图像转换为看起来像与原始灰度图像相同,只是轮廓将以青色覆盖在图像上。 iout
下面是一个示例,使用MATLAB图像处理工具箱'cameraman.tif'
中包含的图像:
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
与边缘检测算法无关。这只是显示前面步骤中找到的边缘的简单方法。二维灰度强度图像无法显示颜色,因此如果要向图像添加彩色轮廓线,您必须首先将其转换为可以显示颜色的格式:索引图像(有点根据我的经验,更难处理)或 3-D RGB 图像(第三维表示每个像素的红色、绿色和蓝色分量)。
在三维中将灰度图像复制 3 次,我们得到了一个 3-D RGB 图像,该图像最初仍然包含灰色(每个像素的红色、绿色和蓝色的数量相等)。但是,通过修改每个颜色平面的某些像素,我们可以为图像添加颜色。BW
通过向绿色和蓝色平面添加逻辑边缘掩码(边缘在哪里,其他地方为零),找到轮廓的那些像素将显示为青色。对函数的调用min
确保添加图像的结果永远不会导致像素颜色值超过 value 1.0
,这是一个元素对于双精度 3-D RGB 图像应具有的最大值。
还应该注意的是,用于创建 3-D RGB 图像的代码可以简化为以下内容:
iout = d1;
iout(:, :, 2) = min(d1+ds, 1.0);
iout(:, :, 3) = min(d1+ds, 1.0);