《数字图像处理》上机实验报告1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理上机实验报告
实验名称:图像的几何变换(象素空间关系)
学期:2014/2015上学期
班级:电子信息工程1102
姓名:陈玮
学号:3110209424
实验时间:2014.09.29
实验一:图像的几何变换(象素空间关系)
1 目的
①了解MATLAB的基本功能,掌握采用MA TLAB进行图像处理的方法;
②了解图像象素空间关系;
③掌握基本坐标变换,包括平移,缩放,旋转等;
④了解形态变换,掌握特殊的形态变换,包括相似变换,刚体变换,等距变换等
2 器材
装有MATLAB的PC机一台
3 原理
双线性内差值法:
1.数学原理
已知的红色数据点与待插值得到的绿色点
假如我们想得到未知函数f在点P= (x,y) 的值,假设我们已知函数f在Q11 = (x1,y1)、Q12 = (x1,y2),Q21 = (x2,y1) 以及Q22 = (x2,y2) 四个点的值。
首先在x方向进行线性插值,得到R1和R2,然后在y方向进行线性插值,得到P.
这样就得到所要的结果f(x,y).
其中红色点Q11,Q12,Q21,Q22为已知的4个像素点.
第一步:X方向的线性插值,插入蓝色第二步:做完X方向的插值后再做Y方向的
点R1和R2. 插值,由R1与R2计算P点.
x方向上
Y方向上插入绿色点P.
线性插值的结果与插值的顺序无关。首先进行y方向的插值,然后进行x方向的插值,所得到的结果是一样的。但双线性插值插值方法这种方法并不是线性的,首先进行y方向的插值,然后进行x 方向的插值,与首先进行x方向的插值,然后进行y方向的插值,所得到的R1与R2是不一样的。
如果选择一个坐标系统使得的四个已知点坐标分别为(0, 0)、(0, 1)、(1, 0) 和(1, 1),那么插值公式就可以化简为
f(x,y)=f(0,0)(1-x)(1-y)+f(0,1)(1-x)y+f(1,1)xy+f(1,0)x(1-y)
在x与y方向上,z值成单调性特性的应用中,此种方法可以做外插运算,即可以求解Q1~Q4所构成的正方形以外的点的值。
双线性内插值算法描述如下:
对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v) (其中i、j均为浮点坐标的整数部分,u、v为浮点坐标的小数部分,是取值[0,1)区间的浮点数),则这个像素得值f(i+u,j+v) 可由原图像中坐标为(i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即:
f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1) 公式1
其中f问题转化如何提取源像素的中四个临近点,根据临近点插值中从目标像素寻找最临近的源像
素点的方法:
Sx= Dx * (Sh/Dh) // row
Sy= Dy * (Sw/Dw) // column
计算出来的值是浮点数坐标,分别取整数部分坐标为(j, k), 小数部分坐标为(t, u)
根据小数部分的(t,u)坐标,首先进行水平方向的权重计算得出
Q11 = S(j,k) * (1-t) + S(j, k+1) * t;
Q22 = S(j+1, k) * (1-t) + S(j+1,K+1) *t
利用Q11, Q22的值,进行垂直方向权重计算得出计算采样点值
D(x, y) = Q11*(1-u) + Q22 * u; 把Q11, Q22带入,最终有等式:
D(x, y) = S(j, k) *(1-t)*(1-u) + S(j, k+1)*t*(1-u) + S(j+1,k)*(1-t)*u + S(j+1,k+1)*t*u 从而得出四个对应的权重系数分别为:
a = (1-t)*(1-u)
b = (1-t)*u
c = t*u
d = t*(1-u)
带入公式一,即可得出目标像素的值。
2.关键程序代码
根据目标像素坐标,计算采样点浮点数坐标的代码如下:
float rowRatio = ((float)srcH)/((float)destH);
float colRatio = ((float)srcW)/((float)destW);
double srcRow = ((float)row)*rowRatio;
double srcCol = ((float)col)*colRatio;
计算采样点的整数坐标和小数部分坐标代码如下:
double j = Math.floor(srcRow);
double t = srcRow – j
double k = Math.floor(srcCol);
double u = srcCol - k;
根据小数坐标(t,u)来计算四个相邻像素点权重系数代码如下:double coffiecent1 = (1.0d-t)*(1.0d-u);
double coffiecent2 = (t)*(1.0d-u);
double coffiecent3 = t*u;
double coffiecent4 = (1.0d-t)*u;
处理边缘像素代码如下:
return x>max ? max : x 4 实验(设计)步骤 1.查找资料 2.理解算法原理 3.编写程序 4.仿真查错 5 设计结果与总结分析