数字图像处理(Matlab复习代码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档