数字图像处理实验二

% 将一幅512×512的原始灰度图像,采用3×3的平均窗口对它作滤波运算(原图像外围的像素的灰度值视为128);
% 对滤波后图像隔行、隔列丢弃一半像素形成一幅256×256的小图像;对此小图像分别采用最邻近内插、双线性内插
% (不用imresize,要自己定义函数)的方法将它放大为512×512的大图像。对照原图像,计算两种放大图像各自的PSNR。

% 滤波器构造函数fspecial(·) 
% 滤波函数imfilter (·)
% 图像放大函数imresize (·)


clear;clc
%
im = double(imread('2-lena.tif'));
w = fspecial('average',[3 3]);
im_lp = imfilter(im,w,128);
im_sub = im_lp(1:2:end,1:2:end);
%
im1 = ex2_nearest(im_sub);
im2 = ex2_bilinear(im_sub);
%
psnr1 = PSNR(im,im1);
psnr2 = PSNR(im,im2);
%
subplot(121)
imshow(mat2gray(im1))
xname = sprintf('Nearest, PSNR = %.2f dB\n',psnr1);
xlabel(xname)
subplot(122)
imshow(mat2gray(im2))
xname = sprintf('Bilinear, PSNR = %.2f dB\n',psnr2);
xlabel(xname)


%ex2_bilinear
function im1 = ex2_bilinear(im_sub)
%
[M,N] = size(im_sub);
im1 = zeros(2*M,2*N);
im1(1:2:end,1:2:end) = im_sub;
%
for ii=1:2:2*M
	for jj = 2:2:2*N-1
		im1(ii,jj) = (im1(ii,jj-1)+im1(ii,jj+1))/2;
	end
end
%
for ii=2:2:2*M-1
	for jj=1:2*N-1
		im1(ii,jj) = (im1(ii-1,jj)+im1(ii+1,jj))/2;
	end
end
%
im1(end,:) = im1(end-1,:);
im1(:,end) = im1(:,end-1);
end


%ex2_nearest
function im1 = ex2_nearest(im_sub)
%
[M,N] = size(im_sub);
im1 = zeros(2*M,2*N);
im1(1:2:end,1:2:end) = im_sub;
%
im1(2:2:end,:) = im1(1:2:end,:);
im1(:,2:2:end) = im1(:,1:2:end);
end


function psnr = PSNR(x,y)
x = double(x);
y = double(y);
cnt = length(x(:));
mse = sum((x(:)-y(:)).^2)/cnt;
psnr = 10*log10(255^2/mse);
end

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值