-
大小: 3.4MB文件类型: .rar金币: 2下载: 1 次发布日期: 2023-08-13
- 语言: Matlab
- 标签: perspective effect correction Harris
资源简介
运用Matlab实现图片透视效果的矫正,通过确定4个特征点,从而矫正透视现象。
代码片段和文件信息
close all
clc
clear;
im = imresize(imread(‘in6.jpg‘)0.5‘bicubic‘);
gray_img = double(rgb2gray(im));
% level = graythresh(im);
% gray_img = im2bw(imlevel/5*4);
%% Corner Detection
[c r] = harris(gray_img0.05);
cornerRC = [r c];
figure
imshow(im);
% hold on;
% plot(rc‘r+‘);
%% Edge Detection and Line Detection
BW = edge(rgb2gray(im)‘canny‘[0.010.5]); % extract edges;
[H theta rho] = hough(BW);
% imshow(mat2gray(H)*1.5);
P = houghpeaks(H10‘threshold‘ceil(0.2*max(H(:))));
% Find lines
lines = houghlines(BWthetarhoP‘FillGap‘60‘MinLength‘60);
% lines = houghlines(BWthetarhoP);
max_len = 0;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
% plot(xy(:1)xy(:2)‘LineWidth‘2‘Color‘‘green‘);
% % Plot beginnings and ends of lines
% plot(xy(11)xy(12)‘x‘‘LineWidth‘2‘Color‘‘yellow‘);
% plot(xy(21)xy(22)‘x‘‘LineWidth‘2‘Color‘‘red‘);
end
%% Make a decision to find good points
threshold = 0.99;
GP=[]; % store good points
for k = 1:length(lines)
% rTheta = [lines(k).rho;lines(k).theta];
points = [lines(k).point1;lines(k).point2];
for i = 1:length(cornerRC)
% r1 = cornerRC(i1)*cos(rTheta(2))+ cornerRC(i2)*cos(rTheta(2));
% r1 = abs(sin(rTheta(2))*cornerRC(i2)+cos(rTheta(2))*cornerRC(i1)-abs(rTheta(1)));
r1 = sqrt((cornerRC(i1)-points(11))^2+(cornerRC(i2)-points(12))^2);
r2 = sqrt((cornerRC(i1)-points(21))^2+(cornerRC(i2)-points(22))^2);
len = sqrt((points(11)-points(21))^2+(points(12)-points(22))^2)
abs(r1-r2)
if abs(r1-r2)/len>0.99
% if abs(r1-rTheta(1)) % if r1 % plot(cornerRC(i1)cornerRC(i2)‘+‘‘LineWidth‘2‘Color‘‘blue‘);
GP(i:)=[cornerRC(i1)cornerRC(i2)];
end
end
end
% find good point manully
[ab]=ginput
pa = a;
pb = b;
absx = abs(abs(a(1)-a(2))-abs(a(3)-a(4)));
absy = abs(abs(b(1)-b(3))-abs(b(2)-b(4)));
if absx>absy
pa(1) = pa(3);
pa(2) = pa(4);
else
pb(1) = pb(2);
pb(3) = pb(4);
end
x = b;
y = a;
px = pb;
py = pa;
A=[x(1) y(1) 1 0 0 0 -px(1)*x(1) -px(1)*y(1) ;
0 0 0 x(1) y(1) 1 -py(1)*x(1) -py(1)*y(1) ;
x(2) y(2) 1 0 0 0 -px(2)*x(2) -px(2)*y(2) ;
0 0 0 x(2) y(2) 1 -py(2)*x(2) -py(2)*y(2) ;
x(3) y(3) 1 0 0 0 -px(3)*x(3) -px(3)*y(3) ;
0 0 0 x(3) y(3) 1 -py(3)*x(3) -py(3)*y(3) ;
x(4) y(4) 1 0 0 0 -px(4)*x(4) -px(4)*y(4) ;
0 0 0 x(4) y(4) 1 -py(4)*x(4) -py(4)*y(4) ];
B = [px(1);py(1);px(2);py(2);px(3);py(3);px(4);py(4)];
h = A\B;
H = ones(33);
for i =1:3
for j = 1:3
if(i==3&&j==3)
H(ij) = 1;
else
H(ij)=h(3*(i-1)+j);
end
end
end
Xn=[];
Yn=[];
[m n]=size(rgb2gray(im));
imgin=im;
for i=1:m
for j=1:n
newxy = H*[i;j;1];
newxy = newxy/(H(31)*i+H(32)*j+H(33));
Xn = round(newxy(1));
if
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 94923 2010-12-10 13:29 DIP\building1.jpg
文件 83532 2010-12-10 13:31 DIP\building2.jpg
文件 80901 2010-12-10 13:28 DIP\castle.jpg
文件 3369 2010-12-07 14:44 DIP\code\FindGP.m
文件 1458 2010-12-06 22:42 DIP\code\harris.m
文件 37249 2010-11-02 13:28 DIP\code\in.jpg
文件 100180 2010-11-02 14:17 DIP\code\in2.jpg
文件 27844 2010-11-11 23:08 DIP\code\in3.jpg
文件 157479 2010-12-07 12:47 DIP\code\in4.jpg
文件 41229 2010-12-07 14:08 DIP\code\in5.jpg
文件 44708 2010-12-07 14:09 DIP\code\in6.jpg
文件 128356 2010-12-07 14:10 DIP\code\in7.jpg
文件 362 2010-12-10 13:47 DIP\code\read me.txt
文件 2834 2010-12-07 14:17 DIP\code\test1.m
文件 2820 2010-12-07 13:07 DIP\code\test2.m
文件 3206 2010-12-07 13:08 DIP\code\test3.m
..A.SH. 7680 2010-12-10 13:34 DIP\code\Thumbs.db
文件 2465280 2010-12-09 15:34 DIP\DIP.ppt
文件 6733 2010-12-10 13:26 DIP\GP_ideal.jpg
文件 21265 2010-12-10 13:26 DIP\GP_window.jpg
文件 516948 2010-12-10 13:41 DIP\Perspective Correction final report.docx
..A.SH. 20992 2010-12-10 13:34 DIP\Thumbs.db
文件 68504 2010-12-10 13:31 DIP\window.jpg
目录 0 2010-12-10 13:40 DIP\code
目录 0 2010-12-10 13:48 DIP
----------- --------- ---------- ----- ----
3917852 25
评论
共有 条评论