快速提升图片外围的滤波效果

本实例展示如何创建和实施对于图片外围像素具有快速滤波效果的滤波器。
读取并展示一张图片。

I = imread('peppers.png');
%译者注:因为matlab中多数图片处理函数以double型图像数据为输入对象,
%所以这里使用im2double将图片数据转化为double类型(范围为[0 1])。有些
%真彩图片的类型原本就是double类型,数据可能超过范围[0 1],
%我们在处理前要先用rescale函数将其转换到范围[0 1]。
I = im2double(I);
figure,imshow(I);

在这里插入图片描述

  • 使用高斯空间滤波权值来模糊图像(虚化图像)

通过使用标准差2的高斯滤波器创建一个该图片的模糊副本。

Iblurred = imgaussfilt(I,2);
figure,imshow(Iblurred)

在这里插入图片描述
使用fspecial来创建一个尺寸和图片一般大的高斯滤波权值矩阵。如需提升图片清晰部分的范围,增大filterStrength的值即可。

filterStrength = 50;
weights = fspecial('gaussian',[size(I,1) size(I,2)],filterStrength);
figure,imshow(weights,[])

在这里插入图片描述
使用rescale函数将滤波权值矩阵归一化到范围[0 1]。

weights = rescale(weights);

通过将权值滤波后的图片和模糊图片相加的方法,生成权值模糊图片。MATLAB自动复制权值矩阵weights作用于R,G,B三个通道。

IweightedBlurred = I.*weights + Iblurred.*(1-weights);

画出结果图。可见图片在中间位置保持原先的清晰度,但其四周是模糊的。

figure,imshow(IweightedBlurred)

在这里插入图片描述

  • 使用1/R^2 权值方法来为图片添加晕影(暗角)

先求得图片的尺寸。

sizex = size(I,2);
sizey = size(I,1);

确定晕影的中心。

xcenter = size(I,2)/2;
ycenter = size(I,1)/2;

确定网格点。

[X,Y] = meshgrid((1:sizex)-xcenter,(1:sizey)-ycenter);

确定每一个点(x,y)距中心点的半径。

R2 = X.^2 + Y.^2;

设定R的倒数作为晕影权值(译者注:此处存疑,因为下面他使用的是1-R而不是1/R),并将其归一化到区间[0 1]。

R2 = rescale(R2);
weights = (1-R2);
figure,imshow(weights)

在这里插入图片描述
将权值应用于图片,并画出结果。

I2 = I.*weights;
figure,imshow(I2)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值