资源描述
实验四、图像的基本运算
1(1)选择一幅图像lena8.jpg,设置输入/输出变换的灰度级范围,a=0.3,b=0.6,c=0.1,d=0.9
(2)设置非线性扩展函数的参数c=2
(3)采用灰度倒置变换函数s=255-r进行图像变换
(4)设置二值化图像的阈值,分别为level=0.4,level=0.7
程序如下
I=imread('C:\lena8.jpg');
figure;
subplot(2,3,1);
imshow(I);
title('原图');
J=imadjust(I,[0.3;0.6],[0.1;0.9]); %设置灰度变换的范围
subplot(2,3,2);
imshow(J);
title('线性扩展');
I1=double(I); %将图像转换为double类型
I2=I1/255; %归一化此图像
C=2;
K=C*log(1+I2); %求图像的对数变换
subplot(2,3,3);
imshow(K);
title('非线性扩展');
M=im2bw(I,0.5);
M=~M;
%M=255-I; %将此图像取反
%Figure
subplot(2,3,4);
imshow(M);
title('灰度倒置');
N1=im2bw(I,0.4); %将此图像二值化,阈值为0.4
N2=im2bw(I,0.7); %将此图像二值化,阈值为0.7
subplot(2,3,5);
imshow(N1);
title('二值化阈值0.4');
subplot(2,3,6);
imshow(N2);
title('二值化阈值0.7');
2 选取两幅大小一样的灰度图像hough.bmp和rice.bmp,将两幅图像进行加法运算。
程序如下
I=imread('C:\hough.bmp');
%I=rgb2gray(I);
J=imread('C:\rice.bmp');
I=im2double(I); %将图像转换成double型
J=im2double(J);
K=I+0.3*J; %两幅图像相加
subplot(1,3,1);
imshow(I);
title('物图');
subplot(1,3,2);
imshow(J);
title('背景图');
subplot(1,3,3);
imshow(K);
title('相加后的图');
imwrite(K,'C:\lena1.jpg');
3 选取一幅混合图像,如相加得到的图像lenal.jpg,将混合图像与背景图像做减法运算。
程序如下
A=imread('C:\lena1.jpg');
B=imread('C:\rice.bmp');
A=im2double(A); %将图像转换成double型
B=im2double(B);
C=A-0.3*B;
subplot(1,3,1);
imshow(A);
title('混合图');
subplot(1,3,2);
imshow(B);
title('背景图');
subplot(1,3,3);
imshow(C);
title('分离后的图');
4 选取一幅尺寸为256x256像素的灰度图,如rice.bmp。设置掩模模板,对于需要保留下来的区域,掩模图像的值置为1,而需要被抑制掉的区域,掩模图像的值置为0。
程序如下
A=imread('C:\rice.bmp');
%A=rgb2gray(A);
A=im2double(A);
subplot(1,2,1);
imshow(A);
title('原图');
B=zeros(256,256);
B(40:200,40:200)=1;
K=A.*B;
subplot(1,2,2);
imshow(K);
title('局部图');
5 选取一幅大小为256x256像素的图像,如lena8.jpg. 分别将图比例放大1.5倍,比例缩小0.7倍,非比例放大到420x384像素,非比例缩小到15x180像素。
程序如下
A=imread('C:\lena8.jpg');
Bl=imresize(A,1.5); %比例放大1.5倍,默认采用的是最近邻法进行线性插值
B2=imresize (A, [420 384]); %非比例放大至420:384 Cl=imresize (A, 0 . 7) ; %比例缩小0.7 倍
C1=imresize(A, 0.7) ;
C2=imresize(A, [150 180]) ; %非比例缩小到150:180 figure;
imshow(Bl);
title('比例放大图');
figure;
imshow(B2);
title('非比例放大图');
figure;
imshow(C1);
title('比例缩小图');
figure;
imshow(C2);
title('非比例缩小图');
实验五、图像的变换
1 选取一幅图像,进行离散傅里叶变换,再对其分别进行X轴与Y轴上的平移,得其离散傅里叶变换,观察结果图。
程序如下
I=imread('C:\1.bmp');
%I=imread('C:\lena8.jpg');
%imshow(I);
imshow(real(I));
figure(1)
I=I(:,:,3);
fftI=fft2(I);
sfftI=fftshift(fftI); %求离散傅里叶频谱
%对原始图像进行二维离散傅里叶变换,并将其坐标原点移到频谱图中央位置
RRfdpl=real(sfftI);
IIfdpl=imag(sfftI);
a=sqrt(RRfdpl.^2+IIfdpl.^2);
a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;
figure(2);
imshow(real(a));
I=imread('C:\2.bmp');
figure(3);
imshow(real(I));
I=I(:,:,3);
fftI=fft2(I);
sfftI=fftshift (fftI) ; %求离散傅里叶频谱
%对原始图像进行二维离散傅里叶变换,并将其坐标原点移到频谱图中央位置
RRfdpl=real(sfftI);
IIfdpl=imag(sfftI);
a=sqrt(RRfdpl.^2+IIfdpl.^2);
a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;
figure(4);
imshow(real (a));
I=imread('C:\3.bmp');
figure (5);
imshow(real (I));
I=I(:,:,3);
fftI=fft2 (I);
sfftI = fftshift (fftI) ; %求离散傅里叶频谱
%对原始图像进行二维离散傅里叶变换,并将其坐标原点移到频谱图中央位置
RRfdpl=real (sfftI);
IIfdpl=imag(sfftI);
a=sqrt(RRfdpl.^2+IIfdpl.^2);
a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;
figure(6);
imshow(real(a));
2 选取一幅图像,进行离散傅里叶变换,再对其进行一定角度的旋转,进行离散傅里叶变化。
程序如下
%构造原始图像
I=zeros(256,256);
I(88:168,124:132)=1; %图像范围是256*256,前一值是纵向比,后一值是横向比
imshow(I);
%求原始图像的傅里叶变换
J=fft2(I);
F=abs(J);
J1=fftshift(F);figure
imshow(J1,[5 50]);
%对原始图像进行旋转
J=imrotate(I,90,'bilinear','crop');
figure
imshow(J)
%求旋转后图像的傅里叶频谱
J1=fft2(J);
F=abs(J1);
J2=fftshift(F);figure
Imshow(J2,[5 50])
3 选取一幅图像,进行离散余弦变换,并对其进行离散余弦反变换,观察其结果
程序如下
%对lena24.ipg文件计算二维DCT变换
RGB = imread('C:\lena24.jpg');
figure(1)
imshow(RGB)
I=rgb2gray(RGB);
%真彩色图像转换成灰度图像
J = dct2(I);
%计算二维DCT变换
figure (2)
imshow(log(abs(J)),[])
%图像大部分能量集中在上左角处
figure (3);
J(abs(J) < 10) = 0;
%把变换矩阵中小于10的值置换为0,然后用idct2重构图像
K = idct2(J)/255;
imshow(K)
4 选取一幅图像,进行离散余弦变换,并对其进行压缩解压,观察其结果。
程序如下
RGB = imread('C:\lena24.jpg');
I=rgb2gray(RGB);
I = im2double(I); %转换图像矩阵为双精度型
T = dctmtx(8); %产生二维00?变换矩阵,
%矩阵T及其转置T‘是DCT函数P1*X*P2的参数
B = blkproc(I, [8 8],'P1*x*P2',T,T');
maskl= [ 1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
%二值掩模,用来压缩DCT系数
B2=blkproc(B,[8 8],'P1.*x',maskl);
%只保留DCT变换的10个系数
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
%重构图像
figure,imshow(I);
figure,imshow(B2);
figure,imshow(I2);
实验六、图像的增强
1 对一幅灰度图像进行幂次变换。
程序如下
clear all
close all
I{1}=double(imread('C:\lena8.jpg'));
I{1}=I{1}/255;
figure(1),subplot(2,4,1),imshow(I{1}, []),hold on
I{2}=double(imread('C:\lena1.jpg'));
I{2}=I{2}/255;
subplot(2,4,5),imshow(I{2}, []),hold on
for m=1:2
Index=0;
for lemta=[0.5 5]
Index=Index+1;
F{m}{Index}=I{m}.^lemta;
subplot (2,4,(m-1)*4+Index+1) ,
imshow(F{m}{Index},[])
end
end
2 对一幅灰度图像采用两种目标直方图来规定化。
程序如下
clear all
close all
%0.读图像
I=double(imread('C:\lena8.jpg'));
figure,
imshow (I,[])
N=32;
Hist_image=hist (I(:),N) ; %直方图
Hist_image=Hist_image/sum (Hist_image); Hist_image_cumulation=cumsum(Hist_image);
%累计直方图
figure,
stem([0:N-1] ,Hist_image) ;
%1.设计目标直方图
Index=0:N-1;
Index=0:7;
%正态分布直方图
Hist{1}=exp(-(Index-4).^2/8);
Hist{1}=Hist{1}/sum(Hist{1});
Hist_cumulation{1}=cumsum(Hist{1});
figure,
stem([0:7],Hist{1})
%倒三角形状直方图
Hist{2}=abs(15-2*Index);
Hist{2}=Hist{2}/sum(Hist{2});
Hist_cumulation{2}=cumsum(Hist{2});
figure,
stem([0:7],Hist{2})
%2.规定化处理
for m=1:2
Image=I;
%2.1 SML处理
for k=1:N
Temp=abs(Hist_image_cumulation(k)-Hist_cumulation{m});
[Tempi,Project{m}(k)]=min(Temp);
end
%2.2变换后直方图
for k=1:N
Temp=find(Project{m}==k);
if isempty(Temp)
Hist_result{m}(k)=0;
else
Histresult{m}(k)=sum(Hist_image(Temp));
end
end
figure,
stem([0:31],Hist_result{m});
%2.3结果图
Step=256/N;
for k=1:N
Index=find(I>=Step*(k-1)&I<Step*k);
Image(Index)=Project{m}(k);
end
figure,
imshow(Image,[])
end
3 对一幅灰度图像采用多种方法实现平滑、锐化滤波。
程序如下
clear all
close all
I=double(imread('C:\lena8.jpg'));
figure,imshow(I,[]);
% 1.均值低通滤波
H=fspecial('average',5);
F{1}=double(filter2(H,I));
figure,imshow(F{1},[]);
% 2 . gaussian低通滤波
H=fspecial('gaussian',7,3); F{2}=double(filter2(H,I));
figure,imshow(F{2},[]);
% 3.增强图像-原图-均值低通滤波
F{3}=2*I-F{1};
figure,imshow(uint8 (F{3}),[]);
% 4.增强图像=原图-高斯低通滤波
F{4}=2*I-F{2};
figure,imshow(uint8 (F{4}),[]);
%5. ‘prewitt’边缘算子增强
H=fspecial('prewitt');
F{ 5}=uint8(I+filter2(H,I));
figure,imshow(F{5},[]);
%6. ‘sobel’边缘算子增强
H=fspecial('sobel');
F{6}=uint8(I + filter2(H,I));
figure,imshow(F{6},[]);
实验7、图像的复原
1 对一幅灰度图像添加噪声并滤波。
程序如下
clear;
close all;
%1.生成含噪图像
img = imread('C:\lena8.bmp');
figure; imshow(img);
img =double(imnoise(img,'salt & pepper', 0.01));
figure,imshow(img,[]);
%2.采用均值滤波
N=5; %滤波模板大小
h=fspecial('average',N);
I=filter2(h,img);
figure,imshow(I,[])
%3.中值滤波
I=medfilt2(img,[N N]);
figure,imshow(I,[])
%4.最大值滤波
I=ordfilt2(img,N*N,true(N));
figure,imshow(I,[])
%5.最小值滤波
I=ordfilt2(img,1,true(N));
figure,imshow(I,[])
2 对沿X轴方向的纹波加性噪声进行陷波滤波。
程序如下
close all
clear all
%1.生成波纹噪声图像
img = double(imread('C:\lena8.bmp'));
figure; imshow(img,[]);
sizec=size(img);
w=0.4*2*pi; %噪声的数字频率
N=2*pi/w; %噪声每一周期的采样点数
img_noise=img+20*ones(sizec(1),1)*sin(w*[1:sizec(2)]);
figure,imshow(img_noise,[]);
%图像频谱
F0=fft2(img);
F0=fftshift(F0);
figure,imshow(log(abs(F0)),[]);
F=fft2(img_noise);
F=fftshift(F);
figure,imshow(log(abs(F)),[]);
%2.设计理想陷波滤波器
H=ones(sizec(1),sizec(2));
%图像中心点
x0=sizec(1)/2+1;
y0=sizec(2)/2+1;
%噪声所处频率点(x,y)
x=x0;
y=y0-round(sizec(2)/N);
H (x,y-3:y+3)=0;
H(x,(y0-y)+y0-3:(y0-y)+y0+3)=0;
%3.滤波结果
I=ifftshift(F.*H);
imgl=ifft2(I);
figure; imshow(imgl,[]);
展开阅读全文