MATLAB实验三.docx
- 文档编号:10946087
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:10
- 大小:1.05MB
MATLAB实验三.docx
《MATLAB实验三.docx》由会员分享,可在线阅读,更多相关《MATLAB实验三.docx(10页珍藏版)》请在冰豆网上搜索。
MATLAB实验三
Matlab实验三
1、使用非线性灰度变换函数对一幅彩色图像进行点运算,并与使用线性灰度变换函数进行点运算的结果进行比较。
解答:
原图片读入之后数据类型为unit8,并不能进行非线性的
变换,先转换成为double类型数据进行非线性变换。
可见非线性变换是原图的颜色发生了变化,而线性变换只是把原图的亮度变化了而已。
MATLAB代码:
%test1
clc;closeall;clearall;
im=imread('alies.jpg');
im_double=im2double(im);
im1=1-im_double.^2;
im2=4+0.64*im;
figure();
subplot(131);
imshow(im);title('原图');
subplot(132);
imshow(im1);title('非线性变换');
subplot(133);
imshow(im2);title('线性变换');
2、对一幅图像进行DCT变换,分别保留最大的总变换系数个数的1/4、1/8和1/16个变换系数,进行反DCT得到重构图像,显示原图像和重构图像并计算重构图像的峰值信噪比。
解答:
为了避免直接截取DCT系数造成的图像大小变化,采取对截取掉的部分填充0的方法进行DCT系数截取。
原图和重构图像如下:
计算得出峰值信噪比分别为:
65.5464,64.1656,63.1766。
MATLAB代码:
[test2.m]
%test2
clc;closeall;clearall;
im=imread('alies.jpg');
im=im2double(im);
im_size=size(im);
lenx=im_size
(1);
leny=im_size
(2);
im_dct(:
:
1)=dct2(im(:
:
1));
im_dct(:
:
2)=dct2(im(:
:
2));
im_dct(:
:
3)=dct2(im(:
:
3));
im_dct_4=zeros(im_size);im_dct_8=zeros(im_size);im_dct_16=zeros(im_size);
im_dct_4(1:
floor(lenx/4),1:
floor(leny/4),:
)=im_dct(1:
floor(lenx/4),1:
floor(leny/4),:
);
im_dct_8(1:
floor(lenx/8),1:
floor(leny/8),:
)=im_dct(1:
floor(lenx/8),1:
floor(leny/8),:
);
im_dct_16(1:
floor(lenx/16),1:
floor(leny/16),:
)=im_dct(1:
floor(lenx/16),1:
floor(leny/16),:
);
im_4(:
:
1)=idct2(im_dct_4(:
:
1));
im_4(:
:
2)=idct2(im_dct_4(:
:
2));
im_4(:
:
3)=idct2(im_dct_4(:
:
3));
im_8(:
:
1)=idct2(im_dct_8(:
:
1));
im_8(:
:
2)=idct2(im_dct_8(:
:
2));
im_8(:
:
3)=idct2(im_dct_8(:
:
3));
im_16(:
:
1)=idct2(im_dct_16(:
:
1));
im_16(:
:
2)=idct2(im_dct_16(:
:
2));
im_16(:
:
3)=idct2(im_dct_16(:
:
3));
figure();
subplot(232);
imshow(im);title('原图');
subplot(234);
imshow(im_4);title('1/4DCT')
subplot(235);
imshow(im_8);title('1/8DCT');
subplot(236);
imshow(im_16);title('1/16DCT');
pnsr_4=pnsr(im_4,im)
pnsr_8=pnsr(im_8,im)
pnsr_16=pnsr(im_16,im)
[pnsr.m]
functionpnsr=pnsr(I,P)
%计算原始图像I和处理后图像P之间的峰值信噪比
ifsize(I)~=size(P)
error('图像大小必须相同');
elseiflength(size(I))==3
%彩色图像
sizep=size(I);
mse=0;lenx=sizep
(1);leny=sizep
(2);
forz=1:
3
forx=1:
lenx
fory=1:
leny
mse=mse+abs(I(x,y,z)^2-P(x,y,z)^2);
end
end
mse=mse/(lenx*leny);
end
mse=mse/3;
mse=double(mse);
pnsr=10*log10(255^2/mse);
elseiflength(size(I))==2
%灰度图像
sizep=size(I);
mse=0;lenx=sizep
(1);leny=sizep
(2);
forx=1:
lenx
fory=1:
leny
mse=mse+abs(I(x,y,z)^2-P(x,y,z)^2);
end
end
mse=mse/(lenx*leny);
mse=double(mse);
pnsr=10*log10(255^2/mse);
end
end
3、对一幅分别添加了椒盐噪声和高斯白噪声的图象进行均值和中值滤波(取三种不同大小的模板),并分析实验结果。
解答:
如下图所示,对原图加入椒盐噪声,分别使用2x2,4x4,8x8的模板对图像进行滤波。
可见中值滤波对椒盐噪声的滤波效果非常明显,2x2的模板率出了大部分噪声,还有小部分剩余,4x4基本率出了全部噪声,而8x8模板在滤除噪声的同时对原图像造成了不小的影响,是图像边缘模糊。
但是均值滤波的效果就不是很明显了,无论是2x2,4x4还是8x8滤波后都能看到明显的噪声。
如下图所示,对原始图像加入高斯噪声,然后分别使用2x2,4x4,8x8的模板对图像进行均值滤波。
可见,使用中值滤波对图像的噪声并不能很好的过滤,但也能够过滤掉一部分噪声,8x8的滤波效果最好,但是对原始图像产生了比较大的影响,背景的纹理基本不可见。
使用均值滤波对高斯噪声的滤波结果比较理想,使用4x4滤波后的图像基本看不到噪声的存在,使用8x8模板之后噪声已经非常小了,但是原图像却发生了很大的变化。
综上所述,对于不同的噪声类型不同的滤波方法产生的结果不同。
中值滤波对于椒盐噪声有很好的滤波效果,而均值滤波对搞死噪声有较好的滤波效果。
同时中值滤波和均值滤波在使用的模板过大的时候会对图形造成较大的影响,边缘模糊,细节纹理丢失等。
MATLAB代码:
[test3_salt.m]
%test3
clc;closeall;clearall;
im=imread('alies.jpg');im=im2double(im);
%加入椒盐噪声和高斯噪声
im_salt=imnoise(im,'salt&pepper',0.1);
%中值滤波(2x2,4x4,8x8)
forz=1:
3
%椒盐噪声
im_salt_mid_2x2(:
:
z)=medfilt2(im_salt(:
:
z),[2,2]);
im_salt_mid_4x4(:
:
z)=medfilt2(im_salt(:
:
z),[4,4]);
im_salt_mid_8x8(:
:
z)=medfilt2(im_salt(:
:
z),[8,8]);
end
%均值滤波(2x2,4x4,8x8)
mask1=ones(2,2)/4;
mask2=ones(4,4)/16;
mask3=ones(8,8)/64;
forz=1:
3
%椒盐噪声
im_salt_avg_2x2(:
:
z)=conv2(im_salt(:
:
z),mask1);
im_salt_avg_4x4(:
:
z)=conv2(im_salt(:
:
z),mask2);
im_salt_avg_8x8(:
:
z)=conv2(im_salt(:
:
z),mask3);
end
figure('name','椒盐噪声滤波');
subplot(331);
imshow(im);title('原图');
subplot(333);
imshow(im_salt);title('椒盐噪声');
subplot(334);
imshow(im_salt_mid_2x2);title('2x2中值滤波椒盐噪声');
subplot(335);
imshow(im_salt_mid_4x4);title('4x4中值滤波椒盐噪声');
subplot(336);
imshow(im_salt_mid_8x8);title('8x8中值滤波椒盐噪声');
subplot(337);
imshow(im_salt_avg_2x2);title('2x2均值滤波椒盐噪声');
subplot(338);
imshow(im_salt_avg_4x4);title('4x4均值滤波椒盐噪声');
subplot(339);
imshow(im_salt_avg_8x8);title('8x8均值滤波椒盐噪声');
[test3_gaus.m]
%test3
clc;closeall;clearall;
im=imread('alies.jpg');im=im2double(im);
%加入高斯噪声和高斯噪声
im_gaus=imnoise(im,'gaussian',0.1);
%中值滤波(2x2,4x4,8x8)
forz=1:
3
%高斯噪声
im_gaus_mid_2x2(:
:
z)=medfilt2(im_gaus(:
:
z),[2,2]);
im_gaus_mid_4x4(:
:
z)=medfilt2(im_gaus(:
:
z),[4,4]);
im_gaus_mid_8x8(:
:
z)=medfilt2(im_gaus(:
:
z),[8,8]);
end
%均值滤波(2x2,4x4,8x8)
mask1=ones(2,2)/4;
mask2=ones(4,4)/16;
mask3=ones(8,8)/64;
forz=1:
3
%高斯噪声
im_gaus_avg_2x2(:
:
z)=conv2(im_gaus(:
:
z),mask1);
im_gaus_avg_4x4(:
:
z)=conv2(im_gaus(:
:
z),mask2);
im_gaus_avg_8x8(:
:
z)=conv2(im_gaus(:
:
z),mask3);
end
figure('name','高斯噪声滤波');
subplot(331);
imshow(im);title('原图');
subplot(333);
imshow(im_gaus);title('高斯噪声');
subplot(334);
imshow(im_gaus_mid_2x2);title('2x2中值滤波高斯噪声');
subplot(335);
imshow(im_gaus_mid_4x4);title('4x4中值滤波高斯噪声');
subplot(336);
imshow(im_gaus_mid_8x8);title('8x8中值滤波高斯噪声');
subplot(337);
imshow(im_gaus_avg_2x2);title('2x2均值滤波高斯噪声');
subplot(338);
imshow(im_gaus_avg_4x4);title('4x4均值滤波高斯噪声');
subplot(339);
imshow(im_gaus_avg_8x8);title('8x8均值滤波高斯噪声');
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 实验