
昨天,我匆忙完成了数字图像处理的实验报告,并整理了一些文档。今天,我附加了相关代码,只写了实验要求,然后附加了代码和运行结果图。
实验1的要求
编写程序add.m,subtract.m,immultiply.m文件,分别实现两个图像的加,减,乘
从矩阵的角度编写程序,以添加图像以获得混合图像,然后减去混合图像和背景图像。
编写程序以实现图像的部分显示
使用子图功能实现多幅图像的显示(已在我的代码中应用)

这是实验的原始图片,尺寸为500×500方形图片

这是原始图片的第二个实验,尺寸为500×500平方,请注意,尝试选择一张正方形图片,否则会发生错误,程序将无法运行
%此为加运算
clear all;
I=imread('1.jpg');
J=imread('2.jpg');
K=imadd(I,J);
subplot(1,3,1);
imshow(I);
subplot(1,3,2);
imshow(J);
subplot(1,3,3);
imshow(K);
%此为减运算
clear all;
I=imread('1.jpg');
J=imread('2.jpg');
K=imsubtract(I,J);
subplot(1,3,1);
imshow(I);
subplot(1,3,2);
imshow(J);
subplot(1,3,3);
imshow(K);
%此为乘运算
clear all;
I=imread('1.jpg');
J=imread('2.jpg');
I1=double(I);
J1=double(J);
K=immultiply(I1,J1);
subplot(1,3,1);
imshow(I);
subplot(1,3,2);
imshow(J);
subplot(1,3,3);
imshow(K);
%此为除运算(在要求中没有)
I=imread('1.jpg');
J=imread('2.jpg');
K=imdivide(I,J);
subplot(1,3,1);
imshow(I);
subplot(1,3,2);
imshow(J);
subplot(1,3,3);
imshow(K);建议:我个人建议在编写MATLAB程序代码时,尝试在其前面添加所有内容;以下是实验效果图


这是加法运算的结果,前两个是原始图像,第三个是结果

这是减法运算的结果,前两个是原始图像,第三个是结果

这是乘法运算的结果,前两个是原始图像,第三个是结果

这是分割操作的结果,前两个是原始图像,第三个是结果
%从矩阵的角度编写程序实现图像的加法运算得到混合图像,然后将混合图像与背景图像做减法运算。
clear all;
I=imread('1.jpg');
J=imread('2.jpg');
I1=double(I);
J1=double(J);
K=imadd(I,J);
L=imsubtract(K,I);
subplot(2,2,1);
imshow(I),title('原图1');
subplot(2,2,2);
imshow(J),title('原图2');
subplot(2,2,3);
imshow(K),title('相加的混合图像');
subplot(2,2,4);
imshow(L),title('混合图像减去背景');

上图是实验一和第二题的实验图

%实现图像的局部显示
clear all;
I=imread('1.jpg');
J=rgb2gray(I);
K=im2double(J);
subplot(1,2,1),imshow(K),title('原图灰度图像');
B=zeros(500,500);%注意,此处500,500是你的图片的大小
B(60:200,60:200)=1;
Q=immultiply(K,B);
subplot(1,2,2);imshow(Q),title('局部显示');
实验2的要求:[在此实验中,图片仍是实验1中的原始图像1.JPG,2.JPG,以下实验同样适用]
(1)查找原始图像的傅立叶光谱(2)旋转原始图像,例如90度(3)查找旋转图像的傅立叶光谱(4)显示光谱图像([ 1)将真彩像转换为灰度图像(2)计算二维DCT转换(3)显示并观察转换后的图像(4)将转换矩阵中小于10的值替换为0,然后使用余弦逆变换构造图像。(5)显示构造图像
%频谱
clear all;
I=imread('1.jpg');
subplot(1,3,1);
imshow(I);
title('原图');
I=rgb2gray(I);
fftI=fft2(I);
sfftI=fftshift(fftI);
rr=real(sfftI);
ii=imag(sfftI);
A=sqrt(rr.^2+ii.^2);
A=(A-min(min(A)))/(max(max(A))-min(min(A)))*255;
subplot(1,3,2);
imshow(A);
title('频谱');
J=imrotate(I,90);
fftJ=fft2(J);
sfftJ=fftshift(fftJ);
rr=real(sfftJ);
ii=imag(sfftJ);
B=sqrt(rr.^2+ii.^2);
B=(B-min(min(B)))/(max(max(B))-min(min(B)))*255;
subplot(1,3,3);
imshow(B);
title('翻转90度频谱');

%DCT变换
clear all;
I=imread('1.jpg');
I1=rgb2gray(I);
subplot(1,3,1),imshow(I1),title('原灰度图');
I2=dct2(I1);
subplot(1,3,2),imshow(I2),title('dct变换');
I2(abs(I2)<10)=0;
K=idct2(I2)/255;
subplot(1,3,3),imshow(K),title('重构图');
实验三个要求:
读取图像并使用imadjust函数将图像转换为灰度并显示
将图像转换为双倍类型,并对其进行规范化
找到图像s = c log(r +1)的对数变换并将其显示

反转原始图像并显示反转的图像
以0.4阈值对原始图像进行二值化处理并显示
clear all;
I=imread('1.jpg');
I=imresize(I,[500,500]);
I=rgb2gray(I);
subplot(2,3,1);
imshow(I),title('原图灰度图');
k=imadjust(I,[0.5 0.9],[0 1]);
subplot(2,3,2);
imshow(k),title('imadjust函数灰度变换后灰度图');
I1=im2double(I);
S=2*log(1+(I1));
subplot(2,3,3);
imshow(S),title('经过对数变换后的图像');
m=imadjust(I,[0 1],[1 0]);
subplot(2,3,4);
imshow(m),title('灰度倒置后的图像');
q=im2bw(I,0.4);
subplot(2,3,6);
imshow(q),title('二值化处理的图像,阈值为0.4');

实验四的要求:
选择一个图像,添加盐和胡椒噪声,分别使用均值滤波器和中值滤波器进行平滑,将滤波效果与具有高斯噪声的图像进行比较,使用巴特沃思低通,指数低通和梯形低通处理图片。选择一张图像,然后使用sobel运算符,prewitt运算符和Laplacian来锐化图像
I=imread('2.jpg');
I=rgb2gray(I);
subplot(2,3,1);
imshow(I),title('原图灰度图像');%原图的灰度图像
J=imnoise(I,'salt & pepper',0.04);
subplot(2,3,2);
imshow(J),title('椒盐噪声图像');%加了噪声的图像
J1=double(J)/255;
h1=[1/9 1/9 1/9;1/9 1/9 1/9;1/9 1/9 1/9];%领域运算
I1=conv2(J1,h1,'same');
subplot(2,3,3);
imshow(I1),title('均值滤波图像');%均值滤波图像
I2= medfilt2(J1,[5,5]);%进行二维3*3中值滤波
subplot(2,3,4);
imshow(I),title('原图灰度图像');%原图的灰度图像
subplot(2,3,5);
imshow(J),title('椒盐噪声图像');%加了噪声的图像
subplot(2,3,6);
imshow(I2),title('中值滤波图像');


I=imread('2.jpg');
I=rgb2gray(I);
subplot(1,3,1);
imshow(I),title('原图灰度图像');
J=imnoise(I,'gaussian',0.02);
subplot(1,3,2);
imshow(J),title('加高斯噪声图像');
F=double(J);
G=fft2(F); % 傅立叶变换
G=fftshift(G); % 把快速傅里叶变换的DC组件移到光谱中心
[M,N]=size(I);
js=2; % 二阶
d0=50; %截止频率为30
m=fix(M/2);
n=fix(N/2);
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d/d0)^(2*js)); % 低通滤波器传递函数
g(i,j)=h*G(i,j);
end
end
%g=h.*G;
result=ifftshift(g);
Y2=ifft2(result);
Y3=uint8(real(Y2));
subplot(1,3,3);
imshow(Y3),title('巴特沃斯低通滤波')


clear all;
I=imread('2.jpg');
I=rgb2gray(I);
subplot(1,3,1);
imshow(I),title('原图灰度图像');
J2=imnoise(I,'gaussian',0.02);
subplot(1,3,2);
imshow(J2),title('加高斯噪声图像');
F=double(J2);
G=fft2(F); % 傅立叶变换
G=fftshift(G); % 把快速傅里叶变换的DC组件移到光谱中心
[M,N]=size(G);
js=2; % 二阶指数低通滤波器
d0=50; %截止频率为30
m=fix(M/2);
n=fix(N/2);
for i=1:M
for j=1:N
D=sqrt((i-m)^2+(j-n)^2);
h1(i,j)=exp(log(1/sqrt(2))*(D/d0)^js);
end
end
g=h1.*G;
result=ifftshift(g);
Y2=ifft2(result);
Y3=uint8(real(Y2));
subplot(1,3,3);
imshow(Y3),title('指数低通滤波')
I=imread('2.jpg'); %读原图
I=rgb2gray(I);
subplot(1,3,1);
imshow(I),title('原图灰度图像');
J2=imnoise(I,'gaussian',0.02); %加均值为0,方差为0.02的高斯噪声。
subplot(1,3,2);
imshow(J2),title('加高斯噪声图像'); %显示有高斯噪声图像
F=double(J2);
G=fft2(F); % 傅立叶变换
G=fftshift(G); % 转换数据矩阵
[M,N]=size(G);
d0=200;
d1=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);
h(i,j)=double(D
%锐化
i = imread('2.jpg');
I=rgb2gray(i);
subplot(2,2,1),imshow(I),title('原图灰度图像');
I=double(I);
H1=fspecial('sobel');
I1=filter2(H1,I);
subplot(2,2,2),imshow(I1),title('sobel算子锐化');
H2=fspecial('prewitt');
I1=filter2(H2,I);
subplot(2,2,3),imshow(I1),title('prewitt算子锐化');
h=[0 1 0,1 -4 1,0 1 0];
J=conv2(I,h,'same');
K=I-J;
subplot(2,2,4),imshow(K,[]),title('拉普拉斯算子锐化');
实验5要求:
选择图像,使用Sobel,Roberts,Prewitt,LOG,Canny运算符进行边缘检测,并观察效果
%边缘检测
I = imread('2.jpg');
subplot(2,3,1);
imshow(I),title('原图像');
I = rgb2gray(I);
BW1 = edge(I,'sobel',0.1);
BW2 = edge(I,'roberts',0.1);
BW3 = edge(I,'prewitt',0.1);
BW4 = edge(I,'log',0.01);
BW5 = edge(I,'canny',0.1);
subplot(2,3,2);
imshow(BW1);
title('Sobel算子检测效果')
subplot(2,3,3);
imshow(BW2);
title('Roberts算子检测效果')
subplot(2,3,4);imshow(BW3)
title('Prewitt算子检测效果')
subplot(2,3,5);
imshow(BW4);
title('LOG算子检测效果')
subplot(2,3,6);
imshow(BW5);
title('Canny算子检测效果')
以上是本实验的全部内容,因此我不会在上面写下问题。
在本文中,我建议编写MATLAB代码时,尝试添加全部清除;越多越好。为什么?由于未添加,因此之前产生的结果很容易干扰以下内容,例如

我以前曾经遇到过。前面有一个图像,但是第三个消失了。我找不到原因。我添加了clear all;之后,一切正常。希望这可以帮助。附上我的实验文件:(访问代码:1569)
补充:使用MATLAB编写程序时,建议不要使用纯数字作为文件名。我上了血腥的课。当使用纯数字运行时,总是提示您切换目录,但是无论如何切换,都无济于事。记住。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-334043-1.html
就换船吧
完全隔绝空气