我需要在项目中检测边缘以进行形状检测。
目前,我正在使用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
最佳答案
在Photoshop中处理文件时,Photoshop会先找到“edges edge”,“edges”和“levels”命令,然后再输出更多的内容。我不建议您使用Photoshop,Photoshop是一种方便的工具,可用于可视化处理图形文件的方法。我总是编写自己的代码,因此不能提出任何现成的解决方案。
我所看到的是photoshop的查找边缘给出了边缘硬度的灰度结果,而您要查找的对象是边缘最硬的对象。
您所看到的是首先将图像转换为黑白(类似于level命令),然后找到边缘。转换为黑白会在阴影中创建任意线条,然后对其进行跟踪。这导致原始图像中出现的阴影中的灰色平滑过渡到描画中的人造线。
通过创建灰度边缘,然后将灰度边缘转换为黑白,灰度的平滑移动不会产生任何边缘。
关于matlab - 需要对粗糙表面重叠的物体进行良好的边缘检测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14908470/