Matlab-Hough变换中的帧线

Matlab-Hough变换中的帧线,matlab,transform,hough-transform,Matlab,Transform,Hough Transform,我正在Matlab中实现Hough-Radon变换来检测一些模式(主要是直线)。我已经实现了它,但问题是它还将“帧”检测为一条线(见图) 实现这一点的代码基本上是: [H,T,R] = hough(BW,'RhoResolution',0.6,'Theta',-90:0.5:89.5); P = houghpeaks(H,20,'threshold', ceil(0.1*max(H(:)))); lines = houghlines(BW,T,R,P,'FillGap', 15,'MinLe

我正在Matlab中实现Hough-Radon变换来检测一些模式(主要是直线)。我已经实现了它,但问题是它还将“帧”检测为一条线(见图)

实现这一点的代码基本上是:

[H,T,R] = hough(BW,'RhoResolution',0.6,'Theta',-90:0.5:89.5);
P  = houghpeaks(H,20,'threshold', ceil(0.1*max(H(:))));
lines = houghlines(BW,T,R,P,'FillGap', 15,'MinLength',50);
其中lines是由字段组成的结构:

  • 起点
  • 终点
  • 特提斯角
  • 距离ρ
我能做些什么来摆脱这四条框架线吗

编辑:

执行Hough变换之前的原始图片为:


问题在于预处理。看看你放进hough的二进制图像:里面有那些行

我建议您将二值化替换为以下内容:

BW = imbinarize(I, 128);
BW = bwmorph(BW,'skel');

以前从没见过这个。您确定这些不在
BW
中吗?在任何情况下,您都可以从
P
中删除它们,因为您知道这4行的参数。我已经用Hough Transofrm之前的原始图片更新了问题。由于所需的线具有相同的角度,因此无法按角度移除它们。而且每次的点都是不同的,所以不能通过这种方式移除。还有其他想法吗?那不是BW图像,因为它不是二进制的。如何对其进行二值化?
P
包含每条线的角度和距离。您可以找出这些线对应的角度和距离,然后将其删除。你为什么说每次的分数都不一样?什么要点?在霍夫空间?它是随机的吗???关于我所说的点(即每条线的起点和终点),我有几个类似的图像(但不是相等的),所以每次我执行hough变换并得到这些线时,“帧”线都会略有不同。例如,第一次从位置(1,1)开始,下一次从位置(2,4)开始。因此,我无法通过移除特定位置来过滤它们,因为每次都是不同的(并且可能我想要检测的真实直线非常接近帧)。垂直线已消失,但水平线(框架线)仍然存在。我也用n=inf检查过了。@Pep:是的,图像的外部有一些线条,我认为它们太微妙了,大津无法捕捉到。但也许你需要手动找到一个更好的阈值。我已使用手动阈值(128)更新了答案。调整此值,直到您在BW图像中只看到感兴趣的线条。根据Matlab帮助,阈值应该在0和1之间,不是吗?不,我认为这只是您想要设置阈值的值。我假设您的输入在0-255范围内。你也可以只做
BW=I>128
。我终于有了它!我使用了imbinarize(I,'自适应','灵敏度',0.01);我只得到中心线,没有“框架”。谢谢!