数字图像实验二~四

更新时间:2024-01-25 14:39:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验二 %%图像文件读取 a=imread('lyy.tif'); %图像写入

imwrite(a,'lyy.tif'); %%

%读取照片信息 sizeofa=size(a);

inf=imfinfo('lyy','tif'); %% %显示照片 imshow(a)

%%

%将彩图转换为灰度图 I = imread('lyy.tif'); B= rgb2gray(I);

figure, imshow(B), figure, imshow(I);

%%

%灰度图像转化

rgb=imread('lyy.tif'); [x1 map1]=rgb2ind(rgb,64); x=ind2gray(x1,map1); imshow(x1,map1)

figure, imshow(x)

%%

%调整灰度图像对比度 clear all; close all; I=imread('lyy.tif'); P=rgb2gray(I);

J=imadjust(P, [0.2 0.5], [0 1]); figure;

subplot(131);%原图 imshow(uint8(I)); subplot(132);%%灰度图 imshow(uint8(P));

subplot(133);%%经过灰度变换后的灰度图 imshow(uint8(J));

%%

%获取图像直方图 p=imread('lyy.tif'); i=rgb2gray(p); imhist(i)

%%

%直方图均衡化

M = imread('lyy.tif'); I=rgb2gray(M); J = histeq(I); imshow(I) figure, imshow(J) 均衡化前的图像

均衡化后的图像

%%

%直方图规范化

close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc;

R=imread('lyy.tif');%读入原图像,赋值给R

J=rgb2gray(R); %将彩色图像数据R转换为灰度图像数据J [M,N]=size(J); %获得灰度图像数据J的行列数M,N x=1;y=1; %定义行索引变量x、列索引变量y for x=1:M for y=1:N

if (J(x,y)<=35); %对灰度图像J进行分段处理,处理后的结果返回给矩阵H

H(x,y)=J(x,y)*10; elseif(J(x,y)>35&J(x,y)<=75); H(x,y)=(10/7)*[J(x,y)-5]+50; else(J(x,y)>75);

H(x,y)=(105/180)*[J(x,y)-75]+150; end end end

set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置

set(0,'defaultFigureColor',[1 1 1])%修改图形背景颜色的设置 subplot(121),imshow(J)%显示处理前后的图像 subplot(122),imshow(H); 规定化前的图像

规定化后的图像

%%

%初始操作

fn=imread('cameraman.tif');%读取图像 %%

%%%%%加噪声与噪声处理%%%%%% %加噪声

I = imread('cameraman.tif');%原图像

J = imnoise(I,'salt & pepper',0.02);%加噪声 J1=imnoise(I,'gaussian'); subplot(311), imshow(I) title('原图像') subplot(312), imshow(J) title('椒盐噪声') subplot(313) imshow(J1) title('高斯噪声')

%%

%处理噪声

w4=fspecial('laplacian',0); g4=fn-imfilter(J,w4,'replicate'); g41=fn-imfilter(J,w4,'symmetric'); g42=fn-imfilter(J,w4,'circular'); g43=fn-imfilter(J1,w4,'replicate'); g44=fn-imfilter(J1,w4,'symmetric'); g45=fn-imfilter(J1,w4,'circular'); %%

%显示椒盐噪声过滤效果效果 subplot(424) imshow(fn)

title('原图')

subplot(421),imshow(g4)%%replicate办法 title('replicate办法处理椒盐噪声')

subplot(422),imshow(g41)%%symmetric办法 title('symmetric办法处理椒盐噪声')

subplot(423),imshow(g42)%%circular办法 title('circular办法处理椒盐噪声') subplot(425) imshow(g43)

title('replicate办法处理高斯噪声') subplot(426) imshow(g44)

title('symmetric办法处理高斯噪声') subplot(427) imshow(g45)

title('circular办法处理高斯噪声')

%%

%对椒盐噪声做10次均值滤波 H1= fspecial('average',10); jiao1 = imfilter(J,H1,'replicate'); subplot(211) imshow(J)

title('加噪声图像') subplot(212) imshow(jiao1); title('10次均值滤波')

%%

%对椒盐噪声做20次均值滤波 H2 = fspecial('average',20); jiao2 = imfilter(J,H2,'replicate'); imshow(J)

title('加噪声图像') subplot(212) imshow(jiao2);

title('20次均值滤波')

%%

%用中值滤波和均值滤波处理椒盐噪声 I = imread('cameraman.tif');

J = imnoise(I,'salt & pepper',0.02); K = medfilt2(J);%%中值滤波器 H2 = fspecial('average',10); jiao3 = imfilter(I,H2,'replicate'); subplot(311) imshow(J),

title('原图像 梁逸云') subplot(312), imshow(K)

title('中值滤波') subplot(313)

imshow(jiao3) title('均值滤波')

%%

%低通(平滑)滤波器(利用低通领域模板进行平滑) fn=imread('cameraman.tif'); k=fspecial('average');

kn=filter2(k,fn)/256;%%3*3平滑滤波 k1=fspecial('average',9);

kn1=filter2(k1,fn)/255;%%9*9平滑滤波 %% %显示

subplot(3,1,1);

imshow(fn) title('原图 梁逸云') subplot(3,1,2); imshow(kn) title('3*3平滑滤波') subplot(3,1,3); imshow(kn1)

title('9*9平滑滤波')

实验三 %%

%%%%%锐化空间滤波%%%%%%%

%线性平滑滤波器(用3*3模板处理图像) w8=[1 1 1;1 -8 1;1 1 1];%创建3*3矩阵 g8=fn-imfilter(fn,w8,'replicate'); %%

%3*3模板,边沿处理

g82=fn-imfilter(fn,w8,'symmetric'); %%

%5*5模板

g25=genlaplacian(fn); %%

%显示图像(3*3模板) subplot(3,1,1); imshow(fn)

title('原图 梁逸云') subplot(3,1,2); imshow(g8)

title('3*3处理后的图像 梁逸云') subplot(3,1,3); imshow(g82)

title('3*3模板边沿处理的图像 梁逸云')

%%

%显示图像(5*5模板) subplot(211) imshow(fn)

title('原图 梁逸云') subplot(212), imshow(g25)

title('5*5处理后的图像 梁逸云')

%%

%%%%锐化增强%%%%%

%产生5*5,9*9,15*15,25*25大小的拉普拉斯算子 w55=ones(5);

w55(3,3)=w55(3,3)-25; w99=ones(9);

w99(5,5)=w99(5,5)-81; w15=ones(15);

w15(8,8)=w15(8,8)-15^2; w25=ones(25);

w25(13,13)=w25(13,13)-25^2; %%

%利用算子

g55=fn-imfilter(fn,w55,'replicate'); g99=fn-imfilter(fn,w99,'replicate'); g15=fn-imfilter(fn,w15,'replicate'); g25=fn-imfilter(fn,w25,'replicate'); %%

%显示效果 subplot(321), imshow(fn)

title('原图像 梁逸云') subplot(322), imshow(g55)

title('5*5模板 梁逸云') subplot(323), imshow(g99) title('9*9模板') subplot(324), imshow(g15)

title('15*15模板 梁逸云') subplot(325), imshow(g25)

title('25*25模板 梁逸云')

%%

%自行设计锐化滤波器进行锐化滤波 I=imread('cameraman.tif');

domain=[8 8 0 8 8;8 8 0 8 8;0 0 0 0 0;8 8 0 8 8;8 8 0 8 8]; K1=ordfilt2(I,5,domain); %%

%显示原图与锐化滤波器效果,进行对比 subplot(211) imshow(I)

title('原图 梁逸云') subplot(212) imshow(K1)

title('滤波后图像')

附代码中使用的genlaplacian函数 function g = genlaplacian(n)

%UNTITLED3 此处显示有关此函数的摘要 % 此处显示详细说明

w25=[1 1 1 1 1;1 1 1 1 1;1 1 -24 1 1;1 1 1 1 1;1 1 1 1 1]; g=n-imfilter(n,w25,'replicate'); end

实验四 %读取原图像

I=imread('camen.gif'); J=imread('rice.gif'); subplot(427) imshow(I)%%显示图像 title('camen.gif') subplot(428) imshow(J)%%显示图像 title('rice.gif')

%%

%对原图像加高斯噪声并显示 subplot(421);

I=imnoise(I,'gaussian'); imshow(I)

title('加高斯噪声的camen.gif') subplot(422);

J=imnoise(J,'gaussian');

imshow(J)

title('加高斯噪声的rice.gif') title('加高斯噪声的rice.gif')

%% %%

%计算频谱幅值

a=ffi(I);%%用函数ffi做归一化具体函数文件见附函数文件ffi a1=ffi(J);%%%用函数ffi做归一化具体函数文件见附函数文件ffi %%

subplot(423)

imshow(a)%显示原图像频谱

title('加高斯噪声的camen.gif频谱') subplot(424) imshow(a1)

title('加高斯噪声的rice.gif频谱') %% %高斯滤波

a=ffi(I);%%用函数ffi做归一化具体函数文件见附函数文件ffi a1=ffi(J);%%%用函数ffi做归一化具体函数文件见附函数文件ffi nn=fspecial('gaussian',15,40); fe=imfilter(I,nn,'replicate'); fe1=imfilter(J,nn,'replicate'); subplot(425); imshow(fe)

title('高斯滤波后camen.gif') subplot(426); imshow(fe1)

title('高斯滤波后rice.gif')

%%

%高斯平滑滤波

n1=3;sigma1=1.5;n2=3;sigma2=1.5;theta=0; [I,map]=imread('camen.gif'); I=imnoise(I,'gaussian');

a=ffi(I);%用函数ffi做归一化具体函数文件见附函数文件ffi r=[cos(theta) -sin(theta); sin(theta) cos(theta)]; for i = 1 : n2 for j = 1 : n1

u = r*[j-(n1+1)/2 i-(n2+1)/2]';

h(i,j)=exp(-u(1)^2/(2*sigma1^2))/(sigma1*sqrt(2*pi))*exp(-u(2)^2/(2*sigma2^2))/(sigma2*sqrt(2*pi)); end end

h = h / sqrt(sum(sum(h.*h))); f1=convn(I,h,'same'); f2=convn(a,h,'same');

subplot(2,2,1); imagesc(I);title('camen.gif'); colormap(gray); subplot(2,2,2);

imagesc(f1);title('高斯平滑滤波后的camen1.gif(3x3)'); colormap(gray);

subplot(2,2,3); imshow(a);title('camen.gif的频谱'); colormap(gray); subplot(2,2,4);

imshow(f2);title('高斯滤波平滑后的camen.gif(3x3)的频谱'); colormap(gray); %%

%%

%高斯高通滤波 I=imread('camen.gif'); I=imnoise(I,'gaussian');

a=ffi(I);%%用函数ffi做归一化具体函数文件见附函数文件ffi [N,M]=size(I); figure; subplot(2,2,1); imshow(I)

title('源图像camen.gif '); subplot(222); imshow(a)

title('源图像camen.gif 频谱');

n1=3;sigma1=0.5;n2=3;sigma2=0.5;theta=0; r=[cos(theta) -sin(theta); sin(theta) cos(theta)]; for i = 1 : n2 for j = 1 : n1

u = r*[j-(n1+1)/2 i-(n2+1)/2]';

h(i,j)=exp(-u(1)^2/(2*sigma1^2))/(sigma1*sqrt(2*pi))*exp(-u(2)^2/(2*sigma2^2))/(sigma2*sqrt(2*pi)); end end

h = h / sqrt(sum(sum(h.*h))); f1=convn(I,h,'same'); f2=convn(a,h,'same'); t=ones(N,M); t=f1; for i=2:N-1 for j=2:M-1

f1(i,j)=t(i+1,j)+t(i-1,j)+t(i,j+1)+t(i,j-1)-4*t(i,j); end end

t1=ones(N,M); t1=f2; for i=2:N-1 for j=2:M-1

f2(i,j)=t1(i+1,j)+t1(i-1,j)+t1(i,j+1)+t1(i,j-1)-4*t1(i,j); end end

subplot(2,2,3); imshow(f1);

title('高斯高通滤波后-camen.gif '); subplot(2,2,4); imshow(f2)

title(' 高斯高通滤波后-camen.gif的频谱 ');

%%

%巴特沃斯低通滤波 I=imread('camen.gif'); I=imnoise(I,'gaussian');

figure;subplot(221);imshow(I);title('灰度图像'); f=double(I); g=fft2(f);g=fftshift(g); F2=log(abs(g));

subplot(222);imshow(F2,[],'InitialMagnification','fit');title('灰度图像频谱图'); colormap(jet); %colorbar

[result F3] =bartworL( g );%%用bartworL做滤波处理,具体函数见附函数bartworL

subplot(224);imshow(F3,[],'InitialMagnification','fit');title('巴特沃斯低通滤波后的灰度图像频谱'); colormap(jet); %colorbar

result=ifftshift(result); X2=ifft2(result); X3=uint8(real(X2));

subplot(223);imshow(X3);title('巴特沃斯滤波后的灰度图像');

%%

%巴特沃斯高通滤波

I=imread('camen.gif'); I=imnoise(I,'gaussian');

subplot(221);imshow(I);title('灰度图像'); f=double(I); g=fft2(f); g=fftshift(g); F2=log(abs(g));

subplot(222);imshow(F2,[],'InitialMagnification','fit');title('图像的频谱图');

colormap(jet); %colorbar

[result F3]=bartworH(g);%%用bartworH做滤波处理,具体函数见附函数bartworH subplot(224);imshow(F3,[],'InitialMagnification','fit');title('巴特沃斯滤波后的频谱图'); colormap(jet); %colorbar

result=ifftshift(result); X2=ifft2(result); X3=uint8(real(X2));

subplot(223);imshow(X3);title('巴特沃斯高通滤波后的图像'); %%

%理想低通滤波器

I=imread('camen.gif');

J=imnoise(I,'gaussian',0,0.02);

subplot(1,2,1);imshow(J);title('原图'); f=double(J); g=fft2(f); g=fftshift(g); [M,N]=size(g); d0=100;

m=fix(M/2);n=fix(N/2); for i=1:M for j=1:N

d=sqrt((i-m)^2+(j-n)^2); if (d<=d0) h=1; else h=0; end

result(i,j)=h*g(i,j); end end

result=ifftshift(result); J1=ifft2(result); J2=uint8(real(J1));

subplot(1,2,2);imshow(J2);title('理想低通滤波图像'); %%

%理想高通滤波器

I=imread('camen.gif');

J=imnoise(I,'gaussian',0,0.02);

subplot(1,2,1);imshow(J);title('原图'); f=double(J); g=fft2(f); g=fftshift(g); [M,N]=size(g); d0=80;

m=fix(M/2);n=fix(N/2); for i=1:M for j=1:N

d=sqrt((i-m)^2+(j-n)^2); if(d>=d0) h=1; else h=0; end

result(i,j)=h*g(i,j); end end

result=ifftshift(result); J1=ifft2(result); J2=uint8(real(J1));

subplot(1,2,2);imshow(J2);title('理想高通滤波图像');

附函数ffi

function a = ffi(I) %%

%傅里叶处理

fftI=fft2(I);%二维离散傅里叶变换

sfft=fftshift(fftI);%直流分量移到频谱中心 rr=real(sfft);%取傅里叶变换的实部 ii=imag(sfft);%取傅里叶变换的虚部 %%

a=sqrt(rr.^2+ii.^2);%计算频谱幅值

a=(a-min(min(a)))/(max(max(a))-min(min(a)))*255;%归一化 end

附函数bartworL

function [ result F3 ] =bartworL( g ) %巴特沃斯低通滤波

% 返回频谱F3以及图像数据result

[N1,N2]=size(g); n=2; d0=5;

n1=fix(N1/2); n2=fix(N2/2); for i=1:N1 for j=1:N2

d=sqrt((i-n1)^2+(j-n2)^2); if d==0 h=0; else

h=1/(1+(d/d0)^(2*n)); end

result(i,j)=h*g(i,j); end

end

F3=log(abs(result));

end

附函数bartworH

function [result F3]=bartworH(g) %巴特沃斯高通滤波器

% 返回频谱F3以及图像数据result [N1,N2]=size(g); n=2; d0=5;

n1=fix(N1/2); n2=fix(N2/2); for i=1:N1 for j=1:N2

d=sqrt((i-n1)^2+(j-n2)^2);

if d==0 h=0; else

h=1/(1+(d0/d)^(2*n)); end

result(i,j)=h*g(i,j); end end

F3=log(abs(result));

end

本文来源:https://www.bwwdw.com/article/w99w.html

Top