数字图像处理期末复习资料全.docx
《数字图像处理期末复习资料全.docx》由会员分享,可在线阅读,更多相关《数字图像处理期末复习资料全.docx(20页珍藏版)》请在冰豆网上搜索。
数字图像处理期末复习资料全
空域对图像进行平移运算(几何运算)
图像平移变换式的矩阵形式为:
P37
closeall;
clearall;
clc;
%图像的平移运算
Im=imread('meinv.jpg');
ifnumel(size(Im))>2%如果是彩色图像就转换为灰度图像
Im=rgb2gray(Im);
end
Im=im2double(Im);%归一化处理
subplot(1,2,1);imshow(Im);title('平移前的图像');
[m,n]=size(Im);%获取图像大小
res=zeros(m,n)+255;%构造结果矩阵。
每个像素点默认初始化为0(黑色)
delX=50;%平移量X
delY=50;%平移量Y
mask=[10delX;01delY;001];%平移的变换矩阵
fori=1:
m
forj=1:
n
tmp=[i;j;1];
tmp=mask*tmp;%矩阵乘法得到的结果是一个3行1列的数
x=tmp(1,1);
y=tmp(2,1);
%判断变换后的位置是否越界
if(x<=m)&&(y<=n)&&(x>=1)&&(y>=1)
res(x,y)=Im(i,j);
end
end
end
subplot(1,2,2);imshow(res);title('平移后的图像');
空域对图像进行镜像运算(几何运算)
%灰度图像
clc
clear
img=imread('meinv.jpg');%读取图像
ifndims(img)==3%ndims(a)表示矩阵a的维数。
如果是彩色图像就转换为灰度图像
img=rgb2gray(img);%转换
end
subplot(1,3,1);imshow(img);title('原始图像');
img=im2double(img);%转换为double类型,使所有点在0-1之间
[m,n]=size(img);%获取图像大小
res1=zeros(m,n)+255;%构造结果矩阵,加255将图像初始化为白色,不加就是黑色
res2=zeros(m,n)+255;
fori=1:
m
forj=1:
n
res1(i,n-j+1)=img(i,j);%水平镜像
res2(m-i+1,j)=img(i,j);%垂直镜像
end
end
subplot(1,3,2);imshow(res1);title('水平镜像');
subplot(1,3,3);imshow(res2);title('垂直镜像');
imwrite(res1,'hor.bmp');
imwrite(res2,'ver.bmp');
%彩色图像
clc
clear
img=imread('meinv.jpg');%读取图像
subplot(1,3,1);imshow(img);title('原始图像');
img=im2double(img);%转换为double类型,使所有点在0-1之间
[m,n,l]=size(img);%获取图像大小
res1=zeros(m,n,l)+255;%构造结果矩阵,加255将图像初始化为白色,不加就是黑色
res2=zeros(m,n,l)+255;
fori=1:
m
forj=1:
n
fork=1:
l
res1(i,n-j+1,k)=img(i,j,k);%水平镜像
res2(m-i+1,j,k)=img(i,j,k);%垂直镜像
end
end
end
subplot(1,3,2);imshow(res1);title('水平镜像');
subplot(1,3,3);imshow(res2);title('垂直镜像');
imwrite(res1,'hor.bmp');
imwrite(res2,'ver.bmp');
空域使用指定的模板对灰度图像进行平滑处理
[1]%均值滤波
clc
closeall;
clear
img=imread('meinv.jpg');
ifnumel(size(img))>2%如果是彩色图像就转换为灰度图像
img=rgb2gray(img);
end
figure;imshow(img);
img=double(img);
%n是模板大小(即n×n)
n=3;
a(1:
n,1:
n)=1;%a即n×n模板,元素全是1
[height,width]=size(img);%输入图像是[height,width]的,且hight>n,width>n
x1=double(img);
x2=x1;
fori=1:
height-n+1
forj=1:
width-n+1
c=x1(i:
i+(n-1),j:
j+(n-1)).*a;%取出x1中从(i,j)开始的n行n列元素与模板相乘
s=sum(sum(c));%求c矩阵中各元素之和
x2(i+(n-1)/2,j+(n-1)/2)=s/(n*n);%将与模板运算后的各元素的均值赋给模板中心位置的元素
end
end
%未被赋值的元素取原值
pha=uint8(x2);
figure;imshow(pha);
[2]%中值滤波(最大值滤波、最小值滤波)
clc
closeall;
clear
img=imread('meinv.jpg');
ifnumel(size(img))>2%如果是彩色图像就转换为灰度图像
img=rgb2gray(img);
end
figure;imshow(img);
img=double(img);
%n是模板大小(即n×n)
n=3;
a(1:
n,1:
n)=1;%a即n×n模板,元素全是1
[height,width]=size(img);%输入图像是[height,width]的,且hight>n,width>n
x1=double(img);
x2=x1;
fori=1:
height-n+1
forj=1:
width-n+1
c=x1(i:
i+(n-1),j:
j+(n-1));%取出x1中从(i,j)开始的n行n列元素,即模板(n×n的)
e=c(1,:
);%是c矩阵的第一行
foru=2:
n
e=[e,c(u,:
)];%将c矩阵变为一个行矩阵
end
%mm=median(e);%mm是中值(mm=max(e)是最大值,mm=min(e)是最小值)
mm=min(e);
x2(i+(n-1)/2,j+(n-1)/2)=mm;%将模板各元素的中值赋给模板中心位置的元素
end
end
%未被赋值的元素取原值
pha=uint8(x2);
figure;imshow(pha);
彩色图像平滑处理(均值滤波)
closeall;
clear
clc
img=imread('meinv.jpg');
if(numel(size(img))<3)
disp('请输入彩色图像');
else
subplot(2,3,1);imshow(img);title('原始图像');
img=imnoise(img,'gaussian');%g=imnoise(f,‘gaussian’,m,var)是将均值为m,方差为var的高斯噪声加到图像f上。
m的默认值是0、var默认值是0.01
subplot(2,3,2);imshow(img);title('添加噪声后的图像');
%分解
img=double(img);
R=img(:
:
1);
G=img(:
:
2);
B=img(:
:
3);
%对彩色图像的R分量进行平滑处理,而其它分量保持不变
[m,n]=size(R);
fori=2:
m-1
forj=2:
n-1
R(i,j)=(R(i-1,j-1)+R(i-1,j)+R(i-1,j+1)+R(i,j-1)+R(i,j)+R(i,j+1)+R(i+1,j-1)+R(i+1,j)+R(i+1,j+1))/9;
end
end
img1=cat(3,R,G,B);
img1=uint8(img1);
subplot(2,3,3);imshow(img1);title('R分量平滑处理后');
%对彩色图像的R分量和G分量进行平滑处理,B分量保持不变
R=img(:
:
1);
G=img(:
:
2);
B=img(:
:
3);
[m,n]=size(R);
fori=2:
m-1
forj=2:
n-1
R(i,j)=(R(i-1,j-1)+R(i-1,j)+R(i-1,j+1)+R(i,j-1)+R(i,j)+R(i,j+1)+R(i+1,j-1)+R(i+1,j)+R(i+1,j+1))/9;
G(i,j)=(G(i-1,j-1)+G(i-1,j)+G(i-1,j+1)+G(i,j-1)+G(i,j)+G(i,j+1)+G(i+1,j-1)+G(i+1,j)+G(i+1,j+1))/9;
end
end
img2=cat(3,R,G,B);
img2=uint8(img2);
subplot(2,3,4);imshow(img2);title('对R和G分量进行平滑处理后');
%对彩色图像的3个分量同时进行平滑处理
R=img(:
:
1);
G=img(:
:
2);
B=img(:
:
3);
[m,n]=size(R);
fori=2:
m-1
forj=2:
n-1
R(i,j)=(R(i-1,j-1)+R(i-1,j)+R(i-1,j+1)+R(i,j-1)+R(i,j)+R(i,j+1)+R(i+1,j-1)+R(i+1,j)+R(i+1,j+1))/9;
G(i,j)=(G(i-1,j-1)+G(i-1,j)+G(i-1,j+1)+G(i,j-1)+G(i,j)+G(i,j+1)+G(i+1,j-1)+G(i+1,j)+G(i+1,j+1))/9;
B(i,j)=(B(i-1,j-1)+B(i-1,j)+B(i-1,j+1)+B(i,j-1)+B(i,j)+B(i,j+1)+B(i+1,j-1)+B(i+1,j)+B(i+1,j+1))/9;
end
end
img3=cat(3,R,G,B);
img3=uint8(img3);
subplot(2,3,5);imshow(img3);title('对3个分量进行平滑处理后');
end
空域对灰度图像或彩色图像进行模板卷积运算及增强处理
[1]模板:
clc
closeall;
clear
%[FileName,FilePath]=uigetfile('*.jpg;*.png;*.tif;*.img;*.gif;','请选择图像数据');
%str=[FilePathFileName];
img=imread('meinv.jpg');
ifnumel(size(img))>2%如果是彩色图像就转换为灰度图像
img=rgb2gray(img);
end
subplot(1,3,1);imshow(img);title('原始图像');
[m,n]=size(img);
img=im2double(img);
dimg=img;%边界
fori=2:
m-1%非边界
forj=2:
n-1
dimg(i,j)=(img(i+1,j)+img(i-1,j)+img(i,j+1)+img(i,j-1))/4;
end
end
subplot(1,3,2);imshow(dimg);title('模板运算后的图像');
subplot(1,3,3);imshow(img+dimg);title('增强的图像');
[2]模板:
clc
closeall;
clear
img=imread('meinv.jpg');
ifnumel(size(img))>2%如果是彩色图像就转换为灰度图像
img=rgb2gray(img);
end
figure;imshow(img);
[m,n]=size(img);
img=im2double(img);
a=input('请输入a值(围在[0,1]之间):
');
dimg=img;%边界
fori=2:
m-1%非边界
forj=2:
n-1
dimg(i,j)=img(i-1,j)*(-a)+img(i,j-1)*(-a)+img(i,j)*(1+4*a)+img(i,j+1)*(-a)+img(i+1,j)*(-a);
end
end
figure;imshow(img+dimg);
[3]模板:
clc
closeall;
clear
img=imread('meinv.jpg');
ifnumel(size(img))>2%如果是彩色图像就转换为灰度图像
img=rgb2gray(img);
end
figure;imshow(img);
[m,n]=size(img);
img=im2double(img);
dimg=img;%边界
fori=3:
m-2%%处理非边界像素
forj=3:
n-2
dimg(i,j)=img(i-2,j-2)+img(i-2,j-1)*4+img(i-2,j)*7+img(i-2,j+1)*4+img(i-2,j+2)+img(i-1,j-2)*4+img(i-1,j-1)*16+img(i-1,j)*26+img(i-1,j+1)*16+img(i-1,j+2)*4+img(i,j-2)*7+img(i,j-1)*26+img(i,j)*41+img(i,j+1)*26+img(i,j+2)*7+img(i+1,j-2)*4+img(i+1,j-1)*16+img(i+1,j)*26+img(i+1,j+1)*16+img(i+1,j+2)*4+img(i+2,j-2)+img(i+2,j-1)*4+img(i+2,j)*7+img(i+2,j+1)*4+img(i+2,j+2);
end
end
figure;imshow(img+dimg/273);
拉普拉斯模板、锐化算子(P65)
[4]彩色图像拉普拉斯模板
closeall;
clear
clc;
img=imread('meinv.jpg');
if(numel(size(img))<3)
disp('请输入彩色图像');
else
subplot(2,2,1);imshow(img);title('原始图像');
img=im2double(img);
R=img(:
:
1);
G=img(:
:
2);
B=img(:
:
3);
%对R分量使用基本的Laplacian模板(P65)进行增强处理;R1=R+R0
[m,n]=size(R);
R1=R;
fori=2:
m-1
forj=2:
n-1
R1(i,j)=R(i,j)*(-4)+R(i-1,j)+R(i+1,j)+R(i,j-1)+R(i,j+1);
end
end
R2=R-R1;%模板中心为负,做减法运算
img1=cat(3,R2,G,B);
subplot(2,2,2);imshow(img1);title('对R分量处理后');
%对R和G分量使用扩展的Laplacian模板进行增强处理;
[m,n]=size(R);
R1=R;
G1=G;
fori=2:
m-1
forj=2:
n-1
R1(i,j)=R(i,j)*(-8)+R(i-1,j)+R(i+1,j)+R(i,j-1)+R(i,j+1)+R(i-1,j-1)+R(i+1,j-1)+R(i-1,j+1)+R(i+1,j+1);
G1(i,j)=G(i,j)*(-8)+G(i-1,j)+G(i+1,j)+G(i,j-1)+G(i,j+1)+G(i-1,j-1)+G(i+1,j-1)+G(i-1,j+1)+G(i+1,j+1);
end
end
R2=R-R1;%模板中心为负,做减法运算
G2=G-G1;
img2=cat(3,R2,G2,B);
subplot(2,2,3);imshow(img2);title('对R和G分量处理后');
%使用扩展的Laplacian模板对彩色图像的三个分量进行增强处理
[m,n]=size(R);
R1=R;
G1=G;
B1=B;
fori=2:
m-1
forj=2:
n-1
R1(i,j)=R(i,j)*(-8)+R(i-1,j)+R(i+1,j)+R(i,j-1)+R(i,j+1)+R(i-1,j-1)+R(i+1,j-1)+R(i-1,j+1)+R(i+1,j+1);
G1(i,j)=G(i,j)*(-8)+G(i-1,j)+G(i+1,j)+G(i,j-1)+G(i,j+1)+G(i-1,j-1)+G(i+1,j-1)+G(i-1,j+1)+G(i+1,j+1);
B1(i,j)=B(i,j)*(-8)+B(i-1,j)+B(i+1,j)+B(i,j-1)+B(i,j+1)+B(i-1,j-1)+B(i+1,j-1)+B(i-1,j+1)+B(i+1,j+1);
end
end
R2=R-R1;%模板中心为负,做减法运算
G2=G-G1;
B2=B-B1;
img3=cat(3,R2,G2,B2);
subplot(2,2,4);imshow(img3);title('对3个分量处理后');
end
频域对图像进行低通处理(理想、Butterworth等)。
6部(P83)
[1]Butterworth滤波:
clc
closeall;
clear
img=imread('meinv.jpg');
ifnumel(size(img))>2%如果是彩色图像就转换为灰度图像
img=rgb2gray(img);
end
subplot(221);imshow(img);xlabel('原图像');
img=double(img);%数据类型转换
img=fft2(img);%图像Fourier变换
img=fftshift(img);%Fourier变换平移,中心变换
%中心变换代码实现,反中心变化也是一样的
%fori=1:
m
%forj=1:
n
%img(i,j)=((-1)^(i+j))*img(i,j);
%end
%end
F2=log(abs(img));%对Fourier变换结果取绝对值,然后取对数
subplot(222);imshow(F2,[],'InitialMagnification','fit');%将计算后的矩阵用图像表示
xlabel('(b)原始图像的Fourier变换图像');
[N1,N2]=size(img);%Fourier变换图像尺寸
n=2;%参数赋初值。
高通n=0.3
d0=205;
n1=ro