3

我需要在我的项目中检测边缘以进行形状检测。目前我正在使用 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

4

2 回答 2

0

你最好看看BSDS,他们有最先进的边缘检测,应该比 Canny 好得多。
他们也有源代码(为 Linux 编译的 matlab)。

于 2013-02-18T08:39:40.963 回答
0

在 Photoshop 中使用该文件,photoshop 查找边缘边缘,然后是一个级别命令,它提供的输出更像您正在寻找的。我不建议您使用 Photoshop,Photoshop 是一种方便的工具,用于可视化处理图形文件的方法。我总是编写自己的代码,所以不能提出任何现成的解决方案。

我看到的是 Photoshop 的查找边缘给出了边缘硬度的灰度结果,而您正在寻找的对象是边缘最硬的对象。

您得到的似乎是图像首先转换为黑白(如 level 命令),然后找到边缘。转换为黑白是在阴影中创建任意线条,然后对其进行跟踪。这导致在原始图像中显示为阴影中的灰色平滑过渡到跟踪中的人造线。

通过以灰度创建边缘,然后将灰度边缘转换为黑白,灰度的平滑移动不会产生任何边缘。

于 2013-02-17T17:28:57.240 回答