Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何重写默认行检测过滤器,使其适用于任何像素宽度而不是一个像素宽度的对象_Matlab_Image Processing_Edge Detection - Fatal编程技术网

Matlab 如何重写默认行检测过滤器,使其适用于任何像素宽度而不是一个像素宽度的对象

Matlab 如何重写默认行检测过滤器,使其适用于任何像素宽度而不是一个像素宽度的对象,matlab,image-processing,edge-detection,Matlab,Image Processing,Edge Detection,我正在尝试使用内置的Matlab函数检测水平线。我读到过滤器:w=[-1-1-1;22;-1-1-1]应用于图像时将检测到1像素宽的水平线。由于其在水平方向上的响应较高,在其他情况下,其响应为零 我的问题是,我想检测的线超过1像素宽。例如,我想检测此图像中的白线: 现在,如果我使用以下方法对该图像应用上述过滤器: lines = imfilter(img, w); imshow(lines) 它产生以下结果: 它已经按预期工作,即它检测到了1像素厚的水平线,我想这就是为什么它只检测到线的边

我正在尝试使用内置的Matlab函数检测水平线。我读到过滤器:
w=[-1-1-1;22;-1-1-1]
应用于图像时将检测到1像素宽的水平线。由于其在水平方向上的响应较高,在其他情况下,其响应为零

我的问题是,我想检测的线超过1像素宽。例如,我想检测此图像中的白线:

现在,如果我使用以下方法对该图像应用上述过滤器:

lines = imfilter(img, w);
imshow(lines)
它产生以下结果:

它已经按预期工作,即它检测到了1像素厚的水平线,我想这就是为什么它只检测到线的边缘或边界。我想让它检测到完整的白线

那么我该如何做到这一点呢?我如何仅将线路设置为我感兴趣的区域,然后单独处理它们

我认为实现这一点的一种方法是,我以某种方式找出白线的像素宽度,然后制作一个新内核来处理这些维度,但是我如何找到像素宽度呢?如何为所述宽度制作新内核


还是我完全走错了路

您可以尝试使用
bwmorph
功能

例如:

skel=bwmorph(bwmorph(YourImage,'erode', 6),'skel', Inf);
imshow(skel)
结果:

编辑如果要查找行的位置和长度,可以使用
regionprops
,如下所示:

Framed = padarray(YourImage,[3 3],0,'both'); 
imshow(Framed)
hold on;
for k=1:length(centroids)
    line([1 BBoxes{k}(3)],[centroids{k}(2) centroids{k}(2)])
end
hold off;
(这会在图像周围添加一个黑色边框,以隔离单独的线)

线的位置位于
质心
中每个向量的第二个元素中,线的长度可以从
b框
中的边界框中推断出来

您可以这样绘制结果:

Framed = padarray(YourImage,[3 3],0,'both'); 
imshow(Framed)
hold on;
for k=1:length(centroids)
    line([1 BBoxes{k}(3)],[centroids{k}(2) centroids{k}(2)])
end
hold off;
结果:


我看到你没有接受我的回答,你遇到问题了吗?请看我的编辑,我在图像周围添加了一个黑色边框以隔离线条。嗨,Jigg,是的,对此很抱歉。编辑后我接受了你的答案。谢谢你的帮助没问题,很高兴能帮上忙。