从图像中提取轮廓
36视图(30天)
显示旧的评论
你好,
我有我需要的图像extrat外轮廓。我的图像是保存在h矩阵的名字. .(这里还.mat文件连接)
我试过如下所示,而我得到的边缘()函数执行两个配置文件即外部和内部边界如附图所示(contour.bmp)。然而,我只种乐趣是提取外边界在原始image.jpg标有黑色线条
有人能帮我如何提取只有外边界? ?
%将原料转换成二进制图像
rgb1 = imbinarize (h, 700);
显示亮度图像(rgb1);
rgb2 = ind2rgb (rgb1, jet (2));
显示亮度图像(rgb2);
grayimage = rgb2gray (rgb2);
显示亮度图像(grayimage);
边=边(grayimage);
显示亮度图像(边);
0评论
接受的答案
明星黾
2021年6月1日
试试这个,
LD =负载(“h.mat”);
h = LD.h;
图
冲浪(h,“EdgeColor”,“没有”)
网格在
图
级= 750;
[c, h] =轮廓(h,[1] *级);
网格
轴(“平等”)
:idx =找到(c(1) = =级);
为k = 1:元素个数(idx)
范围= (idx (k) + 1): c (2, idx (k));
x {k} = c(范围);
y {k} = c(2、范围);
结束
图
持有在
为k = 1:1
情节(x {k}, {k})
结束
持有从
网格
轴(“平等”)
幸运的是,外边界是整个第一轮廓。的
(x, y)
坐标是在
“x {1}”
和
“y {1}
”。与水平可能会有所不同,所以可能会有更多的一个解决方案,这取决于什么是你想要的。。
也可以有其他的方式来做到这一点,但是这个工作。我检查它与原来的
轮廓
情节。我离开了分析步骤,这样你就可以看到我所做的。
。
6个评论
明星黾
2021年6月2日
在外层循环,它可能是必要的
清晰的
或preallocate
“x”
和
“y”
每一次,只是后
“idx”
任务。
这将是结算:
清晰的x y
或preallocating:
x =细胞(大小(idx));
y =细胞(大小(idx));
预先配置是可取的,因为它创造更有效,更快的代码。
(我写的这种想法,只是发布数据,所以没有专门设计用于在一个循环中。预先配置都清楚现有的值
“x”
和
“y”
,并创建一个单元阵列,可以比不preallocating更快。Preallocating通常在大约一个结果
20%
减少执行时间在接下来的循环而不是preallocating。)
。