数字图像处理复习笔记
数字图像处理笔记,方便大家理解系列,发文章也是为了督促自己复习嘿嘿,但是自己对这个排版还不是很熟练,以后多加练习
数字图像处理之几何变换
首先了解一下图像处理的一丢丢命令吧
F=imread(rice.jpg);
这个就是把图片读入进来了,然后注意读入图片的时候要加上文件的后缀名即可。
有时候不确定我们读入或者要处理数据的类型
用上这个语句即可
whos F
为了让图片可以直观展示出来,我们用上这个语句即可
imshow(F);
将本身的彩色图像转化为灰色图像
J=rgb2gray(F);
这样读入进来的数据就变成一个二维数组了
然后还有一点要非常非常注意的
就是我们的数据类型,我们的imread语句进行图片读入的时候,都是uint8类型的数据,在对数据进行操作的时候,应该对数据类型进行转换,否则就会出现运算方面的错误。
几何变换理解
几何变换又称为空间变换,是将一幅图像中的坐标位置映射到另一幅图像中的新坐标位置。不改变图像的像素值,只是在图像平面上进行像素的重新安排。
对于几何变换,我尽量不啰嗦的语言让大家理解
就相当于一个方格,里面有很多芝麻,我们按照一定的线性关系挪动芝麻,改变他们的坐标位置,但是不改变芝麻本身。
图像平移
首先了解图像平移的变换公式
x1=x0+a;
y1=y0+b;
(x0,y0)是原始图像的坐标,(x1,y1)是变换后图像的坐标
假如我要把图像向右移动a个单位,向下移动b个单位
%move函数实现线性平移
%I表示原图像
%a表示水平右移距离
%b表示垂直下移距离
%J表示结果图像
function [ J ] = move( I,a,b )
[M,N,D]=size(I);
J=I;%将原始图像规格进行copy
for d=1:D
for i=1:M
for j=1:N
if((i-a>0)&(i-a<M)&(j-b>0)&(j-b<N))
J(i,j,d)=I(i-a,j-b,d);%从原图像坐标点到新图像坐标点的映射
else
J(i,j,d)=0;%新图像外的坐标点置黑
end
end
end
end
end
一开始的时候,我是连这个公式也不太理解的,很奇怪,不是加吗?为什么在写代码的时候变成减了。
仔细分析一下我们的平移之后的图像是怎么形成的便可以懂了。
J(i,j)=I(i-a,j-b);
分析这个式子,要求新图像(i,j)处的像素点的值,那是不是应该找原来图像(i-a,j-b)的值了呀,因为新图像坐标值显然大于原来图像
相信我这么解释大家都理解了吧
或者利用公式推导
x0=i-a
y0=j-b;
x1=x0+a=i;
y1=y0+b=j;
是不是完全跟我们之前的分析是不冲突的呀,所以图像处理,先进行公式推导是很便于理解的。
图像镜像变换
例如水平镜像的公式
x1=M-x0;
y1=y0;
[M,N]=size(F);
%mirror函数实现镜像变换功能
%参数I为原图像
%参数n=1时,实现水平镜像变换
%参数n=2时,实现垂直镜像变换
%参数n=3时,实现水平垂直镜像变换
function [ J ] = mirror( I,n )
[M,N,D]=size(I);
J=I;
if(n==1)%进行水平变换
for d=1:D
for i=1:M
for j=1:N
J(i,j,d)=I(i,N-j+1,d);
end
end
end
elseif(n==2)%进行垂直变换
for d=1:D
for i=1:M
for j=1:N
J(i,j,d)=I(M-i+1,j,d);
end
end
end
elseif(n==3)%水平垂直变换
for d=1:D
for i=1:M
for j=1:N
J(i,j,d)=M(M-i+1,N-j+1,d);
end
end
end
else
error('n is wrong');
end
救命,我太懒了,不想打字巴拉巴拉了
大家有需要我解释啥的评论即可,我继续巴拉巴拉