我需要知道如何在Matlab中对齐图像以便进一步工作。如何对齐图像 - Matlab
例如我有下一个车牌图像,我想识别所有的数字 。
我的程序适用于直图像,所以,我需要对齐图像,然后 预制棒的光学识别系统。
该方法应该尽可能普遍适用于各种板和各种角度。
编辑:我试图做到这一点与霍夫变换,但我没有成功。任何人都可以帮助我做到这一点?
任何帮助将不胜感激。
我需要知道如何在Matlab中对齐图像以便进一步工作。如何对齐图像 - Matlab
例如我有下一个车牌图像,我想识别所有的数字 。
我的程序适用于直图像,所以,我需要对齐图像,然后 预制棒的光学识别系统。
该方法应该尽可能普遍适用于各种板和各种角度。
编辑:我试图做到这一点与霍夫变换,但我没有成功。任何人都可以帮助我做到这一点?
任何帮助将不胜感激。
溶液首先在评价暗示通过@AruniRC,然后通过@belisarius Mathematica中实现。以下是我在MATLAB中的解释。
这个想法基本上是一样的:使用Canny方法检测边缘,使用Hough变换找到突出的线条,计算线角度,最后执行剪切变换以对齐图像。
%# read and crop image
I = imread('http://i.stack.imgur.com/CJHaA.png');
I = I(:,1:end-3,:); %# remove small white band on the side
%# egde detection
BW = edge(rgb2gray(I), 'canny');
%# hough transform
[H T R] = hough(BW);
P = houghpeaks(H, 4, 'threshold',ceil(0.75*max(H(:))));
lines = houghlines(BW, T, R, P);
%# shearing transforma
slopes = vertcat(lines.point2) - vertcat(lines.point1);
slopes = slopes(:,2) ./ slopes(:,1);
TFORM = maketform('affine', [1 -slopes(1) 0 ; 0 1 0 ; 0 0 1]);
II = imtransform(I, TFORM);
现在让我们看看结果
%# show edges
figure, imshow(BW)
%# show accumlation matrix and peaks
figure, imshow(imadjust(mat2gray(H)), [], 'XData',T, 'YData',R, 'InitialMagnification','fit')
xlabel('\theta (degrees)'), ylabel('\rho'), colormap(hot), colorbar
hold on, plot(T(P(:,2)), R(P(:,1)), 'gs', 'LineWidth',2), hold off
axis on, axis normal
%# show image with lines overlayed, and the aligned/rotated image
figure
subplot(121), imshow(I), hold on
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1), xy(:,2), 'g.-', 'LineWidth',2);
end, hold off
subplot(122), imshow(II)
梦幻般的答案。谢谢Amro。 +1。 – rayryeng 2015-11-19 22:46:57
如果您正在使用某种机器学习工具箱进行文字识别,请尝试从所有印版中学习 - 不仅仅是对齐的。识别结果应该同样好,如果你改变了平板或者不要,因为通过变换,根据真实数字的新信息不会增强图像。
如果所有图像都有像这样的深色背景,可以对图像进行二值化,将线条放在明亮区域的顶部或底部,然后根据线条渐变计算仿射投影矩阵。
感谢您的回答。我正在对所有图像进行二值化,所以是的背景会是这样的。我如何适应线条? – 2011-05-12 13:37:46
感谢您的回答。你知道如何在Matlab中做到这一点?我的Matlab技能不太好... – 2011-06-05 08:41:38
@Michael对不起,这里没有Matlab。但是你得到了关键字:Hough变换,边缘检测,剪切变换。 – 2011-06-06 14:24:50
@Michael,@belisarius:我发布了一个MATLAB的解决方案,受此启发 – Amro 2011-07-03 15:31:16
如果这是OpenCV的我会说找到最突出的近水平霍夫线,计算它的角度,然后用先前计算的角度对旋转矩阵进行仿射变换。这是否有任何matlab等效?那么你可能会发现它很有帮助。 – AruniRC 2011-04-24 14:02:14