2011-04-24 62 views
12

Tôi cần biết cách căn chỉnh hình ảnh trong Matlab để tiếp tục làm việc.Cách căn chỉnh hình ảnh - Matlab

ví dụ tôi có hình ảnh biển số giấy phép tiếp theo và tôi muốn nhận diện tất cả các số .

enter image description here

chương trình của tôi làm việc cho hình ảnh thẳng như vậy, tôi cần phải căn chỉnh hình ảnh và sau đó phôi hệ thống nhận dạng quang học.

Phương pháp này phải phổ biến cho tất cả các loại tấm và ở mọi góc độ.

EDIT: Tôi đã cố gắng thực hiện điều này với Hough Transform nhưng tôi đã không thành công. ai có thể giúp tôi làm điều này?

mọi trợ giúp sẽ được đánh giá cao.

+3

nếu điều này là OpenCV tôi muốn nói tìm dòng Hough gần-ngang nổi bật nhất, tính toán góc của nó, sau đó thực hiện chuyển đổi affine bằng ma trận xoay với góc như đã tính trước đó. Điều này có bất kỳ tương đương matlab? Sau đó, bạn có thể thấy nó hữu ích. – AruniRC

Trả lời

15

Các giải pháp lần đầu tiên được ám chỉ bởi @AruniRC trong các ý kiến, sau đó thực hiện bởi @belisarius trong Mathematica. Sau đây là cách giải thích của tôi trong MATLAB. Ý tưởng về cơ bản là giống nhau: phát hiện các cạnh bằng cách sử dụng phương pháp Canny, tìm các đường nổi bật bằng cách sử dụng Biến đổi Hough, tính toán góc đường thẳng, cuối cùng thực hiện Chuyển đổi Cắt để căn chỉnh hình ảnh.

%# 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); 

Bây giờ cho phép xem kết quả

%# 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

+0

Câu trả lời tuyệt vời. Cảm ơn Amro. +1. – rayryeng

3

Nếu bạn đang sử dụng một số loại hộp công cụ học máy để nhận dạng văn bản, hãy cố gắng tìm hiểu từ TẤT CẢ các tấm - không chỉ các ô được căn chỉnh. Kết quả nhận dạng phải tốt bằng nhau nếu bạn biến đổi đĩa hoặc không, vì bằng cách chuyển đổi, không có thông tin mới nào theo đúng số sẽ tăng cường hình ảnh.

0

Nếu tất cả các hình ảnh có nền tối như hình nền, bạn có thể binarize hình ảnh, phù hợp với dòng trên cùng hoặc dưới cùng của vùng sáng và tính toán ma trận chiếu afin từ đường kẻ.

+0

cảm ơn câu trả lời của bạn. Tôi đang thực hiện binarization cho tất cả các hình ảnh vì vậy có nền sẽ như thế này. làm thế nào tôi có thể phù hợp với các dòng? –

6

Trong Mathematica, sử dụng Cạnh Detection và Hough transform:

enter image description here

+0

cảm ơn câu trả lời của bạn. bạn có biết làm thế nào để làm điều đó trong Matlab? kỹ năng Matlab của tôi không tốt ... –

+2

@Michael Xin lỗi, không có Matlab ở đây. Nhưng bạn có các từ khóa: Hough Transform, Edge Detection, Shearing Transform. –

+1

@Michael, @belisarius: Tôi đã đăng một giải pháp trong MATLAB lấy cảm hứng từ tác phẩm này – Amro

Các vấn đề liên quan