【发布时间】:2014-05-01 14:54:03
【问题描述】:
我有以下图像:,我想检测一下直觉上看起来很容易的音符轮廓,但是当我尝试这样做时,实际上并不那么容易。
为了快速原型设计,我首先开始使用 MATLAB(但后来我想在 Java 中进行,因此我不想在 MATLAB 中使用太多特殊算法,而是尝试使用基本的图像处理算法(prewitt / sobel / canny / 自适应阈值 / hough trafo)也很容易以另一种语言提供(例如 opencv 等)..
最容易开始的代码是(但我认为这应该已经相当不错了,因为与内部相比,外部边缘看起来更强大):
I = double(rgb2gray(imread('img.jpg')));
bw = edge(I, 'canny');
imshow(bw)
我认为matlab在使用自动模式时会很好地选择canny过滤器中的阈值。但实际上并没有:http://i.imgur.com/LeKPgso.png
当手动将阈值设置为标量时(例如设置为 0.4),内部文本的渐变仍然太多,而外部边框已经太不完整/不完整:http://i.imgur.com/p68CVIU.png
我尝试使用 prewitt 过滤器(在 x 和 y 方向):
I = double(rgb2gray(imread('img.jpg')));
f1 = double(fspecial('prewitt'));
x = conv2(I, f);
y = conv2(I, f');
bw = (x.^2+y.^2).^0.5;
colormap(gray(256))
imagesc(bw);
导致:http://i.imgur.com/Jd9Fqpn.png 所以也不是很好... 它看起来更好,但外面仍然很不完整:(
任何想法如何改进它? 此外,我想稍后将图像展开为矩形。关于如何做的任何想法?霍夫变换不适用于像上图这样的非直线轮廓,因为它会产生直线...
非常感谢!
编辑:好吧,我发现斑驳的外观来自 MATLAB... 放大时,它好多了,斑驳更少,请参阅:http://i.imgur.com/UrPd8me.png 我可以想象通过缩小外轮廓来找到轮廓,因为在这种情况下它是全黑的(某种边界框)。但我不想假设因为这些照片并不总是打开手电筒拍摄,例如:http://i.imgur.com/nfqygmA.jpg 那么外围区域会有一些噪音...
Edit2:刚找到Algorithm to detect corners of paper sheet in photo 显然看起来不太容易。 :) 也许你有一些新的想法可以开始。
【问题讨论】:
标签: algorithm matlab opencv image-processing edge-detection