MATLAB中的轮廓检测
edge-detection
image-processing
matlab
5
0

我试图理解这段代码:

d=edge(d,'canny',.6);
figure,
imshow(d,[])

ds = bwareaopen(d,40);
figure,
imshow(ds,[])

iout = d1;
BW=ds;

iout(:,:,1) = iout;
iout(:,:,2) = iout(:,:,1);
iout(:,:,3) = iout(:,:,1);
iout(:,:,2) = min(iout(:,:,2) + BW, 1.0);
iout(:,:,3) = min(iout(:,:,3) + BW, 1.0);

我知道d是图像,应用了canny探测器,忽略了40个像素。图像是灰度图像,轮廓已添加到图像中。

您能解释下几行吗?这里使用什么原理/算法?我在代码的轮廓检测部分遇到了麻烦。

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

假设可变d1存储什么是可能双精度表示的原始的(0和1之间的值) 的灰度强度图像被上操作,则最后5行会变成该灰度图像划分成3-d RGB图像 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次,可以得到3D RGB图像,该图像最初仍包含灰度色(每个像素等于红色,绿色和蓝色的数量)。但是,通过修改每个颜色平面的某些像素,我们可以为图像添加颜色。通过在绿色和蓝色平面上添加逻辑边缘遮罩BW (边缘处为零的地方),发现轮廓的那些像素将显示为青色。对函数min的调用可确保添加图像的结果永远不会导致像素颜色值超过值1.0 ,该值是元素对于双精度3-D RGB图像应具有的最大值。

还应注意,用于创建3-D RGB图像的代码可以简化为以下代码:

iout = d1;
iout(:, :, 2) = min(d1+ds, 1.0);
iout(:, :, 3) = min(d1+ds, 1.0);
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号