【问题标题】:Boundary tracing in matlabmatlab中的边界跟踪
【发布时间】:2023-03-07 03:19:01
【问题描述】:

我已经在这个网站上看到过用于边界追踪的复杂代码。

我是第一次使用 Matlab 的用户,使用带有 bwtraceboundary 的小代码。

这段代码曾经追踪过叶子图像的轮廓(虽然没有追踪叶柄,这是一个较浅的阴影)......在我改变图像大小之前。那么对于任何图像,我从中得到的都是空白。

我以为我错过了边界的起点,并尝试了不同的值来计算行和列(起始点的坐标),但没有一个起作用。 你能帮我用它的茎追踪叶子吗?

代码是:

I = imread('C:\...\images3.jpg');
imshow(I)
BW = im2bw(I);
imshow(BW)
dim = size(BW)
col = round(dim(2))-90;
row = min(find(BW(:,col)))
boundary = bwtraceboundary(BW,[row, col],'N');
imshow(I)
hold off;
plot(boundary(:,2),boundary(:,1),'b','LineWidth',1);

假设图像矩阵是通过在命令窗口中输入'I'获得的,我可以选择一个起始点吗?怎么样?

【问题讨论】:

  • @Phonon:它来自图像处理工具箱。
  • 糟糕。不知道。

标签: matlab


【解决方案1】:

是的,您可能错过了起点(或方向)。如果你这样做了

imshow(I)
[x, y] = getpts

您可以用鼠标指定起点。在 Matlab 中处理图像时,请注意列和行之间的eternal mix-up

【讨论】:

  • @Phonon:在corner cases列表中
  • 潜在的混淆是为什么我总是写[y,x]=getpts
  • 感谢您的及时回复。 getpts 是我一直在寻找的。但是当我运行它时,它显示错误说“索引超出矩阵尺寸”。 ==> 在 12 plot(boundary(:,2),boundary(:,1),'b','LineWidth',1); 干燥时出错,我阅读了警告,但我尝试交换 y 和 x,只是想看看它是否有效。但不是。修改后的代码是imshow(BW) [x,y]=getpts boundary = bwtraceboundary(BW,[x,y],'E');不需要指定方向吧?
猜你喜欢
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 2015-07-14
  • 2017-01-26
  • 2016-07-06
  • 2018-08-24
  • 1970-01-01
  • 2013-07-15
相关资源
最近更新 更多