数字图像处理之浮雕效果——基于傅里叶变换的频域操作

问题简述

这是信号与系统课程的一个课后作业,要求运用傅里叶变换的理论知识,在matlab中对数字图像进行浮雕效果的处理。

浮雕效果和图像边缘的检测差不多,学习过深度学习的同学可能会想到使用核对图像进行卷积操作,吴恩达老师在DeepLearning.ai系列课程中有相应的讲解。B站传送门

目前网络上绝大多数做法都是图像卷积的做法或是直接在时域内操作,但这里老师要求使用《信号与系统》课程中傅里叶变换的相关知识对图像进行处理,并提示在时域中用一阶微分算子实现。

知识点回顾

哗啦啦啦翻书~

离散时间系统的傅里叶变换(DFT)定义为:DFT定义
提到一阶微分,我们可以想到傅里叶变换中很重要的一条性质——时域微分特性,这里直接给出公式,具体证明这里不进行赘述:
DFT的时域微分性质
到此为止,浮雕效果的生成所需的所有公式都已经给出,但是既然我们处理的是图像,那我们就需要从一维过渡到2维
2D DFT
公式看起来分吓人,其实就是先对x方向逐行进行傅里叶变换,再对y方向逐列进行傅里叶变换而已,图2中的公式也可以推广至此处,但是使用时注意求偏导的方向。

操作代码

function [final_image] = rilievo_filter(image, no_channel, k)
%image 输入的图像矩阵
%no_channel输入图像矩阵的通道数,灰度图为1, rgb图片为3
%


[h, w,~] = size(image);     %获取图像的维度信息

fy = linspace(floor(-h/2)+1,floor(h/2),h);
fy = fy'/h*2*pi*1i;                                  %每一列对应的jw_y

fx = linspace(floor(-w/2)+1,floor(w/2),w);               
fx = fx/w*2*pi*1i;                               %每一行对应的jw_x

final_image = zeros(size(image));

for i = 1:no_channel              %分通道操作
    s = double(image(:,:,i));
    f = fftshift(fft2(s));          %对i通道进行傅里叶变换并将低频移到图像中心
   
    df_y = f.*(1-exp(-fy));     %时域求y方向差分
    df_x = (1-exp(-fx)).*f;      %时域求x方向差分
    df = df_x+k*df_y;               %x方向与y方向的梯度图像加权叠加=x方向与y方向处理后的频谱图像加权叠(由于后期有中心化操作,所以这里控制好比例就可以)
                                        %调节xy分量的权重可以调节效果图中的光照方向
    final_image(:,:,i)=real(ifft2(ifftshift(df)));
end

    final_image = double(final_image)./(max(final_image)-min(final_image))*255.0+128.0;  %中心化与规范化
    final_image = uint8(final_image);

end

成果展示

展示一下处理效果:(小声:Bill超可爱有木有!)
在这里插入图片描述
在这里插入图片描述
bill

改变k的取值,可以改变光照效果与图片的凹凸效果:
在这里插入图片描述
对比一下photoshop中的浮雕效果(飘了飘了~)
在这里插入图片描述

欢迎各位大佬批评指正,若有帮助也请点个赞

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值