我需要在项目中检测边缘以进行形状检测。 目前我正在使用MATLAB,但如果它提供更好的输出,我可以使用openCV。 所以这就是问题所在。我所拥有的样本图像与粗糙表面的物体重叠。 我正在使用此代码并获得良好的输出但表面的粗糙度仍然使我的输出降级。 我在MATLAB中使用这段代码:
a = imread('D:\images\wheatstarch.jpg');
I = rgb2gray(a);
imshow(I)
thresold = graythresh(I);
se1=strel('diamond',2);
I1=imerode(I,se1);
bw = edge(I1,'canny');
figure;
imshow(bw);
我得到这个输出: http://i49.tinypic.com/vg7fns.png
输出更好的输出,以便我可以使用输出进行形状检测。
输入图像供下载 http://www.profimedia.si/photo/wheat-starch-granules/profimedia-0035237439.jpg
答案 0 :(得分:0)
在photoshop中播放文件,photoshop找到边缘,然后是level命令,可以提供更像您正在寻找的输出。我不是建议你使用photoshop,photoshop是一个方便的工具,用于可视化处理图形文件的方法。我总是写自己的代码,所以不能建议任何现成的解决方案。
我所看到的是,Photoshop的发现边缘给出了边缘硬度的灰度结果,而您正在寻找的对象是具有最硬边缘的对象。
你得到的是先将图像转换为b& w(如水平命令),然后找到边缘。转换为b& w是在阴影中创建任意线条,然后进行跟踪。这导致原始图像中出现的阴影中灰色平滑过渡到跟踪中的人造线。
通过以灰度创建边缘,然后将灰度边缘转换为b& w,灰度的平滑移位不会产生任何边缘。
答案 1 :(得分:0)
你最好看看BSDS他们拥有最先进的边缘检测,它应该比Canny表现得更好。
它们还有源代码(为Linux编译的matlab)。