实验一 图像几何变换
一、 实验目的
1. 掌握图像的基本几何变换的方法
2. 图像的平移
3. 图像的旋转
二、 实验内容
练习用 matalb 命令实现图像的平移、旋转操作。
1. 编写实现图像平移的函数。
2. 用 imread 命令从你的硬盘读取一幅 256×256 灰度图。
3. 调用平移函数,将 256×256 灰度图平移 100 行 200 列,在同一个窗口中
显示平移前和平移后的图像。
4. 再开辟一个窗口,分别用最近邻插值法、双线性插值法实现图像顺势针
旋转 50°,显示在同一窗口中,并比较两种效果图(在报告中)。
三、 实验算法分析
1. 图像平移算法:
2. 图像旋转算法:
四、 实验步骤
利用 Matlab 编程,从硬盘中读取一张图片,然后实现图像的平移算法和旋
转算法,保存结果并截图。
五、 源程序
1. 图像平移
SY1shift.m
clc %清空命令窗口
I=rgb2gray(imread('C:\Users\Zhilong\Pictures\SavedPictures\1.JPG'));% 读 入 图 片 并
转化为灰度图
subplot(1,2,1)
imshow(I);%建立窗口,显示灰度图 I
[r,c]=size(I);%计算灰度图的大小,r 表示行,c 表示列,即通过 size 函数将灰度图
I 的行数存在矩阵的 r 中,列数存在矩阵的 c 中,这样就知道灰度图的大小是 r
×c
dst=zeros(r,c);%建立 r×c 的 0 矩阵(平移结果矩阵),初始化为零(黑色)
dx=50;%平移的 x 方向的距离,这里是竖直方向
dy=80;%平移的 y 方向的距离,这里是水平方向
tras=[10dx;01dy;001];%平移变换矩阵
fori=1:r
forj=1:c
temp=[i;j;1];%灰度图 I 要平移变换的点,这里用矩阵表示
temp=tras*temp;%矩阵相乘,得到三行一列的矩阵 temp,即平移后的矩阵
x=temp(1,1);%把矩阵 temp 的第一行第一列的元素给 x
y=temp(2,1);%把矩阵 temp 的第二行第一列的元素给 y
if(x>=1&&x<=r)&&(y>=1&&y<=c)%判断所变换后得到的点是否越界
dst(x,y)=I(i,j);%得到平移结果矩阵,点(x,y)是由点(i,j)平移而来的,有对应关系
end
end
end
subplot(1,2,2)
imshow(uint8(dst));%建立窗口,显示平移后的图
2. 图像旋转
SY1rotation.m
init=imread('C:\Users\Zhilong\Pictures\SavedPictures\1.JPG');%读取图像
subplot(2,1,1)
imshow(init);%建立窗口,显示灰度图 I
[R,C]=size(init);%获取图像大小
res=zeros(R,C);%构造结果矩阵。每个像素点默认初始化为 0(黑色)
alfa=-30*3.1415926/180.0;%旋转角度
tras=[cos(alfa)-sin(alfa)0;sin(alfa)cos(alfa)0;001];%旋转的变换矩阵
fori=1:R
forj=1:C
temp=[i;j;1];
temp=tras*temp;%矩阵乘法
x=uint16(temp(1,1));
y=uint16(temp(2,1));
%变换后的位置判断是否越界
if(x<=R)&(y<=C)&(x>=1)&(y>=1)
res(i,j)=init(x,y);
end
end
end;
subplot(2,1,2)
imshow(uint8(res));%显示图像
六、 实验结果
1. 图像平移
2. 图像旋转
七、 结果分析和讨论
本实验根据图像像素点坐标的变换,实现了对图像的平移操作和旋转操作。
用 matlab 的库函数读取图像后,要转换为了二值图,并计算图像的大小,利用
矩阵的加减乘除运算,变换像素点的坐标,从而组建得到新的图像。
实验二 图像增强
一、 实验目的
熟悉数字图像增强的一般方法,包括:
1. 掌握空域变换增强的原理、方法。
2. 掌握直方图变换的原理、方法。
二、 实验内容
练习图像增强的 Matlab 命令:histeq,histem。
1. 一幅 256X256 的灰度图像如图(a),将 0~60 灰度级压缩到 0~30 范围内,
压缩比 1/2;60~180 的灰度级扩大到 30~240,比率为 190/120;将 180~255 灰度级压
缩到 240~255 范围内,压缩比为 15/75。
2. 熟悉命令 histeq,将原图做直方图均衡处理,比较图像增强的效果,并
用命令 histem 绘制增强后图像的直方图。
三、 实验算法分析
直方图是一个统计数据,变现为图像中灰度值出现的概率,假设一副
640*480 的图像,其中灰度值为 100 的像素点为 1240 个,那么灰度值 100 出现
的概率为:1240/(640*480).把每一个像素值出现的次数都统计出来,就得到
了各个值对应的概率。在这里加入一点概率分布和概率密度函数的记录,方便查
阅。设离散型随机变量 X 的分布律为:
四、 实验步骤
利用 matlab 编程从硬盘中读取图像,并将图像转为二维的,即灰值化。然
后调用 matlab 库函数 imshow 显示原始图像,imhist 显示图像的直方图,对图像
进行均衡化后,在显示出增强后的图像。
五、 源程序
SY2.m
clc,clear;
src_img=imread('C:\Users\Zhilong\Pictures\SavedPictures\1.JPG');
src_img=rgb2gray(src_img);%灰值化
figure(1)
subplot(221),imshow(src_img),title('原图像');%显示原始图像
subplot(222),imhist(src_img),title('原图像直方图');%显示原始图像直方图
matlab_eq=histeq(src_img);%利用 matlab 的函数直方图均衡化
subplot(223),imshow(matlab_eq),title('matlab 直方图均衡化原图像');%显示原始图
像
subplot(224),imhist(matlab_eq),title('matlab 均衡化后的直方图');%显示原始图像
直方图
六、 实验结果
七、 结果分析和讨论
本实验依据概率密度相关知识,用直方图的方式实现图像增强。在实验中,
要用到 imhist 计算图像直方图,再利用 histeq 对直方图进行均衡处理。
实验三 图像恢复
一、 实验目的
掌握图像恢复的常用方法:图像的几何畸变复原或者几何畸变校正。
二、 实验内容
对一幅硬盘中的图片进行几何畸变校正。
三、 实验算法分析
几何基准图像的坐标系统用(x,y)来表示,需要校正的图像的坐标系统用
(x’,y’)表示,设两个图像坐标系统之间的关系用解析式表示
通常 h1(x,y)和 h2(x,y)用多项式来表示:
通常用线性畸变来近似较小的几何畸变
更精确一些可以用二次型来近似
若基准图像为 f(x,y),畸变图像为 g(x’,y’),对于景物上的同一个点,假定
其灰度不变,则
已知 h1(x,y)和 h2(x,y)
通常用线性畸变来近似较小的几何畸变
零级内插
双线性插值
则:
线性畸变
可 由 基 准 图 找 出 三 个 点 (r1,s1),(r2,s2),(r3,s3) 与 畸 变 图 像 上 三 个 点
(u1,v1),(u2,v2),(u3,v3)一一对应。
将对应点代入,有:
解联立方程组,得出 6 个系数。
四、 实验步骤
利用 matlab 编程从硬盘中读取图像,图像坐标系和矩阵的表示是相反的,
将图像像素点 x 和 y 进行畸变的处理,再利用线性插值得到非畸变的图像,与畸
变图像进行对比。
五、 源程序
SY3.m
clear;
clc;
A=[5.9418398977142772e+00203.1950000000000000e+002;
05.941839897714e+0022.3950000000000000e+002;
001];
D=[6.7442695842244271e-0022.4180872220967919e-00100-3.3970575589699975e
-001];
fx=A(1,1);
fy=A(2,2);
cx=A(1,3);
cy=A(2,3);
k1=D(1);
k2=D(2);
k3=D(5);
p1=D(3);
p2=D(4);
K=A;
I_d=imread('C:\Users\Zhilong\Pictures\SavedPictures\1.JPG');
I_d=rgb2gray(I_d);
I_d=im2double(I_d);
I_r=zeros(size(I_d));
%图像坐标系和矩阵的表示是相反的
%[row,col]=find(X),坐标按照列的顺序排列,这样好和 reshape()匹配出响应的图
像矩阵
[vu]=find(~isnan(I_r));
%XYZc 摄像机坐标系的值,但是已经归一化了,因为没有乘比例因子
%公式 s[uv1]'=A*[XcYcZc]',其中 s 为比例因子,不加比例因子,Zc 就为 1,所以
此时的 Xc 相对于(Xc/Zc)
XYZc=inv(A)*[uvones(length(u),1)]';
%此时的 x 和 y 是没有畸变的
r2=XYZc(1,:).^2+XYZc(2,:).^2;
x=XYZc(1,:);
y=XYZc(2,:);
%x 和 y 进行畸变的
x=x.*(1+k1*r2+k2*r2.^2)+2*p1.*x.*y+p2*(r2+2*x.^2);
y=y.*(1+k1*r2+k2*r2.^2)+2*p2.*x.*y+p1*(r2+2*y.^2);
%(u,v)对应的畸变坐标(u_d,v_d)
u_d=reshape(fx*x+cx,size(I_r));
v_d=reshape(fy*y+cy,size(I_r));
%线性插值出非畸变的图像
I_r=interp2(I_d,u_d,v_d);
%对比图像
subplot(121);
imagesc(I_d);
title('畸变原图像');
subplot(122);
imagesc(I_r);
title('校正后图像');
六、 实验结果