如何在Matlab中对齐图像

12

我需要知道如何在Matlab中对齐图像以进行进一步处理。

例如,我有下面的车牌图片,我想识别所有数字。

enter image description here

我的程序只适用于直的图片,因此我需要对图像进行对齐,然后进行光学识别系统。

该方法应尽可能通用,适用于所有类型的车牌和各种角度。

编辑:我尝试使用Hough变换,但没有成功。 有人能帮我做这个吗?

非常感谢任何帮助。


3
如果这是OpenCV,我会建议找到最显著的近乎水平的Hough线,计算其角度,然后使用旋转矩阵进行仿射变换并将角度作为先前计算的参数。这在Matlab中有相应的方法吗?也许对你有帮助。 - AruniRC
4个回答

15
这个解决方案最初是由@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)

canny_edges hough_transform lines_overlayed_image_aligned


太棒了的回答。谢谢Amro。+1。 - rayryeng

6
在Mathematica中,使用边缘检测和霍夫变换:

enter image description here


谢谢你的回答。你知道如何在Matlab中做吗?我的Matlab技能不是很好... - Ofir A.
2
@Michael 抱歉,这里没有Matlab。但是你得到了关键词:霍夫变换、边缘检测、剪切变换。 - Dr. belisarius
1
@Michael,@belisarius:我在MATLAB中发布了一种解决方案,受到了这个的启发。 - Amro

3

如果您正在使用某种文本识别的机器学习工具箱,请尝试从所有车牌中学习 - 不仅仅是对齐的车牌。如果您进行了转换,则识别结果应该同样好,因为转换不会增强图像中关于真实号码的新信息。


0
如果所有的图像都像那个一样有一个黑暗的背景,你可以将图像二值化,适应亮区域的顶部或底部拟合线,并从线梯度计算仿射投影矩阵。

谢谢您的回答。我正在对所有图像进行二值化处理,因此背景会是这样的。我该如何适应这些线条? - Ofir A.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接