溶液を最初Mathematicaで@belisariusによって実現次に、コメントで@AruniRCによりを示唆しました。以下はMATLABでの私の解釈です。
考え方は基本的に同じである:せん断画像を整列させるために変換を実行最後に、計算線は角、ハフ変換を用いて、顕著なラインを見つけ、キャニー法を用いてエッジを検出します。
%# 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);
はさて、これは私が最も顕著ほぼ水平ハフラインを見つけると言うだろうOpenCVのであれば、その角度を計算した結果
%# 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)
見ることができます先に計算した角度の回転行列を用いてアフィン変換を行う。これはmatlabに相当するものはありますか?その後、あなたはそれが役に立つと思うかもしれません。あなたの答えは – AruniRC