数字图像处理(Matlab复习代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
双线性插值法
I_=imread('test.jpg');
I=rgb2gray(I_);
A=0.7;B=0.7;%失真像素坐标
[i,j]=size(I);
m=round(i*A);n=round(j*B);
temp=zeros(m,n);%产生m*n矩阵
G=[A0;0B];
for x=1:m
for y=1:n
ab=[x,y]/G;%取得x/A,y/B
a=ab(1)-floor(ab(1));%权值
b=ab(2)-floor(ab(2));
%防溢出处理
if ab(1)<1
ab(1)=1;
end
if ab(1)>i
ab(1)=i;
end
if ab(2)<1
ab(2)=1;
end
if ab(2)>j
ab(2)=j;
end
%定义内插值坐标
ab11=[floor(ab(1))floor(ab(2))];
ab12=[floor(ab(1))ceil(ab(2))];
ab21=[ceil(ab(1))floor(ab(2))];
ab22=[ceil(ab(1))ceil(ab(2))]; temp(x,y)=(1-a)*(1-b)*I(ab11(1),ab11(2))+... a*(1-b)*I(ab12(1),ab12(2))+...
(1-a)*b*I(ab21(1),ab21(2))+...
a*b*I(ab22(1),ab22(2));
end
end
imshow(uint8(temp)),title('0.7倍双线性');最近邻法
I_=imread('test.jpg');%读入原始图像
I1=rgb2gray(I_);
[i,j]=size(I1);
m=round(i*1.5);n=round(j*1.5);
m_=round(i*0.7);n_=round(j*0.7);
%1.5倍最邻近
TEMP=zeros(m,n);%产生m*n矩阵
for i=1:m
for j=1:n
TEMP(i,j)=I1(round(i/1.5),round(j/1.5));
end
end
subplot(1,3,1),imshow(I1),title('原图')
TEMP1_5=uint8(TEMP);
subplot(1,3,2),
imshow(TEMP1_5),title('1.5倍最邻近')
全局预测下的图像分割
I_=imread('test.jpg');
I=rgb2gray(I_);
[m,n]=size(I);
%统计直方图
zhifangtu=zeros(1,255);%
for i=1:1:m
for j=1:1:n
zhifangtu(I(i,j)+1)=
zhifangtu(I(i,j)+1)+1;
end
end
plot(zhifangtu);
%阈值处理
final=zeros(m,n);
for x=1:1:m
for y=1:1:n
AA=I(x,y);
if AA>120
final(x,y)=255;
else
final(x,y)=0;
end
end
end
imshow(uint8(final));
高通滤波(锐化)Sobel算子
O=imread('test.jpg');
I=rgb2gray(O);
imshow(I);title('锐化前的原始图像');
[m,n]=size(I);
TEMP=zeros(m+2,n+2);
%避免边界为空,用0像素值填充
for i=1:1:m
for j=1:1:n
TEMP(i+1,j+1)=I(i,j);
end
end
%定义所需的空间
vertical=zeros(m,n);
horize=zeros(m,n);
for x=2:1:m+1
for y=2:1:n+1
%上下水平模板
vertical(x-1,y-1)=
[-TEMP(x-1,y-1)+TEMP(x-1,y+1)-TEMP(x,y-1)+ TEMP(x,y+1)-TEMP(x+1,y-1)+TEMP(x+1,y+1)]; %左右垂直模板
horize(x-1,y-1)=
[-TEMP(x-1,y-1)-TEMP(x-1,y)-TEMP(x-1,y+1)+ TEMP(x+1,y-1)+TEMP(x+1,y)+TEMP(x+1,y+1)];
end
end
figure;imshow(vertical);title('垂直模板锐化'); figure;imshow(vertical_);
title('阈值处理后的垂直模板锐化');
figure;imshow(horize);title('水平模板锐化'); figure;imshow(horize_);
title('阈值处理后的水平模板锐化');
低通滤波:
线性滤波(邻域平均法)
I=imread('eight.tif');%读入原始图像
[m n]=size(I);
a_=imnoise(I,'salt&pepper',0.04);
%对图像加椒盐噪声,噪声强度为0.04
a=double(a_);
%先将uint8转换为double类型,以免数据溢出TEMP=zeros(m+2,n+2);
%数值填充,产生一个临时的空间for i=1:1:m
for j=1:1:n
TEMP(i+1,j+1)=a(i,j);
end
end
final=zeros(m,n);
for x=2:1:m+1
for y=2:1:n+1
final(x-1,y-1)=
[TEMP(x-1,y-1)+TEMP(x-1,y)+TEMP(x-1,y+1)+ TEMP(x,y-1)+TEMP(x,y)+TEMP(x,y+1)+TEMP(x+ 1,y-1)+TEMP(x+1,y)+TEMP(x+1,y+1)]/9;
end
end
final2=uint8(final)
非线性滤波(中值滤波)
I=imread('eight.tif');%读入原始图像
[m n]=size(I);
a_=imnoise(I,'salt&pepper',0.04);
%对图像加椒盐噪声,噪声强度为0.04
TEMP=zeros(m+2,n+2);
%数值填充,产生一个临时的空间
for i=1:1:m
for j=1:1:n
TEMP(i+1,j+1)=a_(i,j);
end
end
%中值滤波
final=zeros(m,n);%zeros(m,n)产生m×n的零矩阵for x=2:1:m+1
for y=2:1:n+1
final(x-1,y-1)=
median([TEMP(x-1,y-1),TEMP(x-1,y),TEMP(x-1,y +1),TEMP(x,y-1),TEMP(x,y),TEMP(x,y+1),TEMP( x+1,y-1),TEMP(x+1,y),TEMP(x+1,y+1)]);
end
end