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

2023-11-14

问题简述

这是信号与系统课程的一个课后作业,要求运用傅里叶变换的理论知识,在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中的浮雕效果(飘了飘了~)
在这里插入图片描述

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 将输出从符号数学 (sym) 转换为浮点型

    我的问题类似于这个问题 https stackoverflow com questions 11114101 how to convert mupad symbol i sqrt 1 to i in matlab 11114959 1111
  • 在 Matlab 中对列进行排序

    我有 2 列使用 textscan 导入的数据 数据看起来像这样 其中U is undetect and D is detect mydata 51 U 57 D 48 U 47 D my data 4x1 double 4x1 char
  • 如何建立数据流挖掘的滑动窗口模型?

    我们遇到的情况是 流 来自传感器的数据或服务器上的点击流数据 采用滑动窗口算法 我们必须将最后 例如 500 个数据样本存储在内存中 然后 这些样本用于创建直方图 聚合并捕获有关输入数据流中异常的信息 请告诉我如何制作这样的滑动窗 如果您询
  • Matlab 编辑器不使用 emacs 快捷方式

    Is there some way I can make the matlab integrated editor not use emacs shortcut but use more normal shortcuts such that
  • 这是 `min` 和 `nanmin` 之间的区别; Matlab 中的“max”和“nanmax”?

    Matlab描述nanmin and nanmax像这样 NANMIN最小值 忽略NaNs NANMAX最大值 忽略NaNs 但实际上 min and max ignore NaNs too 那我应该使用哪个 根据我的测试 nanmin a
  • 如何以编程方式指定 MATLAB 编辑器键绑定

    我想将键盘键绑定设置为Windows 默认设置我想在启动时使用startup m因为我希望在大量系统上设置此设置 首选项对话框中的等效设置是 MATLAB gt Keyboard gt Shortcuts gt Active Setting
  • 在 Matlab 中快速加载大块二进制文件

    我有一些相当大的 int16 格式的数据文件 256 个通道 大约 75 1 亿个样本 每个文件约 40 50 GB 左右 它以平面二进制格式编写 因此结构类似于 CH1S1 CH2S1 CH3S1 CH256S1 CH1S2 CH2S2
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • 为什么matlab的mldivide比dgels好这么多?

    Solve Ax b 真正的双 A是超定的 Mx2 其中 M gt gt 2 b是MX1 我运行了大量的数据mldivide 并且结果非常好 我用 MKL 写了一个 mex 例程LAPACKE dgels但它远没有那么好 结果有大量噪音 并
  • 在 MATLAB 中定义其他中缀运算符

    有没有办法在 MATLAB 中定义额外的中缀运算符 具体来说 我想定义两个中缀运算符 gt and lt gt 这些符号是理想的 但如果需要 它可以是单个字符 它调用函数implies and iff以同样的方式 calls and and
  • 优化 MATLAB 代码(嵌套 for 循环计算相似度矩阵)

    我正在 MATLAB 中基于欧几里德距离计算相似度矩阵 我的代码如下 for i 1 N M N is the size of the matrix x for whose elements I am computing similarit
  • 如何加载具有可变文件名的 .mat 文件?

    select all mat files oar dir oar mat n oar name loop through files for l 1 length oar load pat oar l lt this is the mat
  • 如何每次使用按钮将数据添加到 MATLAB 中的现有 XLSX 文件?

    我有一个函数可以生成一些变量 例如分数 对 错 未回答 使用按钮调用此功能 问题是如何每次将函数生成的这些值添加 附加到 XLSX 文件中 或者 如何创建 MAT 文件以便可以添加它 可能的解决方案是什么 附加到 xls 文件所涉及的挑战是
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • 归一化互相关的基础知识

    我正在尝试使用范数校正2 归一化互相关 http en wikipedia org wiki Cross correlation Normalized cross correlation 来自 MATLAB 用于计算发育中胚胎中移动形状的速
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 在 MATLAB 中模拟 C++ 模板

    我试图找出创建 C 模板或 Java 通用对象的替代方案的最佳方法 出于多种不同的原因 我过去曾多次想这样做 但现在我想做的是为几个相关的类创建 saveobj 和 loadobj 函数 我的想法是 我想要一组通用的例程来创建默认结构 然后
  • 命令 A(~A) 在 matlab 中的真正作用是什么

    我一直在寻找找到矩阵非零最小值的最有效方法 并在论坛上找到了这个 设数据为矩阵A A A nan minNonZero min A 这是非常短且高效的 至少在代码行数方面 但我不明白当我们这样做时会发生什么 我找不到任何关于此的文档 因为它
  • for 循环中的绘图没有可见点

    我正在努力解决我想使用 for 循环制作的情节 我知道当我在循环之后添加它时它会起作用 只是一个简单的图 但我想用另一种方式尝试一下 fib ones 1 10 for k 3 10 hold on fib k fib k 1 fib k

随机推荐

  • PhotoShop 之用画笔工具擦除

    最近看了一篇课程 使用渐变工具生成彩虹 并用画笔工具擦除部分图像 1 首先 为图像添加一个图层 2 用渐变工具生成彩虹渐变图像 3 添加图层蒙版 4 前景色设置为黑色 原先为红色 5 使用画笔工具 预设像素设置为150 6 使用画笔进行擦除
  • 双非保研北邮人工智能学院的逆袭之路

    作者 ShawnPi 编辑 CVHub 来源 https zhuanlan zhihu com p 601052513 引言 刚经历过激烈的保研和一段时间的迷茫 希望此帖可以帮助到计算机专业的学弟学妹们 希望能从多维度 多视角解读计算机保研
  • 部署并安装Discuz

    安装前一定要安装apche和mysql数据库 没有安装用以下密令下载 apche下载密令 rpm qa grep httpd mysql下载密令 yum install y mariadb server 安装好这两项后安装php php安装
  • 如何将kaggle中的数据导入到谷歌提供的colab(保姆级教学)

    前言 由于cloab的使用需要梯子 直接将自己电脑里的数据上传到colab里面时网速一直是一个头痛的问题 为了解决这个问题我们可以直接跳过从kaggle里面下载数据的那一步 直接让kaggle的数据导入到colab里面 准备步骤 注册一个k
  • 前端(HTML+CSS+JS)

    前端基础 HTML 文档类型声明 基本结构 块级元素和行内元素 图片 文件路径 常用属性 超链接 文本格式化标签 注释 列表 无序列表 有序列表 自定义列表 表格 表格结构 table属性 tr属性 td属性 表单 form 表单域里的in
  • ROS stm32F4串口+DMA通信

    ROS stm32F4串口 DMA通信 介绍 发送数据错位 uart接收 ROS端部分程序 介绍 本博文基于stm32F407 利用uart3发送数据 并由uart3接收ROS通过串口发送的数据后由uart1发送回ROS 以下 主要针对于调
  • 【C++ Primer(5th Edition) Exercise】练习程序 - Chapter 2(第二章)

    以下程序由 Teddy van Jerry 我自己 编写并运行 基本保证正确性 有时可能会为优化程序超前使用某些内容 Contents Before we comb through the codes Exercise 2 3 Exerci
  • 八、vue项目引入高德地图获取鼠标点击经纬度

    如下图 代码如下 const AMap window AMap 一定要引入AMap data return map null jd wd weizhi 地图初始化 initMap this map new AMap Map map001 c
  • jquery(js) 增加 删除 修改属性样式、元素内容

    引入jquery js 1 增加或修改样式 id css display none 根据id设置隐藏 2 id css background color yellow font size 200 3 增加或修改属性 id attr read
  • 【Python之numpy库】11.np.set_printoptions(threshold=np.inf) 解决输出数组时的省略情况

    当数组元素比较多的时候 如果输出该数组 那么会出现省略号 解决方法 在程序前写如下代码 import numpy as np np set printoptions threshold np inf
  • Android打32/64位兼容包,ABI Filter的使用及其原理

    问题 针对现在VIVO oppo应用平台 打包上传时需要打兼容包的问题 这里就需要注意设置ABI Filter的问题 通过各种百度和千度后 发现唯一一个有问题的帖子竟然要收费观看 于是 这里记录一下 如何处理打32 64位兼容包的问题 1
  • 哈希冲突

    在保存元素不是固定范围时 哈希冲突有可能避免吗 不能避免 因为存储的元素范围远远大于数组的长度 但可以尽可能的减少冲突 那么如何减少 数组大小用素数 Java中不太用 当 index hashValue arr length 时 hash函
  • C语言中的&&符号用法

    在用KEIL5进行编程时 发现这些问题 if RX buf 5 FUNCSTOP RX buf 5 0x01 是逻辑运算符 表示逻辑与 是位运算符 表示按位与 1 2 0 条件判断为假 1 2 1 此时条件判断为真
  • Binary Search Tree

    二叉查找树 Binary Search Tree 又 二叉搜索树 二叉排序树 它或者是一棵空树 或者是具有下列性质的二叉树 a 若它的左子树不空 则左子树上所有结点的值均小于它的根结点的值 b 若它的右子树不空 则右子树上所有结点的值均大于
  • 计算机速度快的秘诀二进制,比二进制计算机速度至少快1到3.6倍的二进制小孔倒像制计算机.pdf...

    该文章介绍了一种 二进制小孔倒像制 计算机 其理论运算速度比普通二进制计算机快1 3 6倍 该计算机从原理来看 较接近于前苏联研制的三进制计算机 Generated by Foxit PDF Creator Foxit Software F
  • PHP头条爬虫,今日头条爬虫分析-爬取用户发的所有内容

    今日头条的用户页数据爬取跟频道页的数据爬取大部分很类似 但稍微有一点不一样 就是用户主页的接口signature有点不一样 需要将当前爬取的用户id和分页时间戳一起作为入参传递进去才能获取到真正的signature 除了这一点差异外其他的都
  • nova mitaka ReleaseNotes

    nova mitaka ReleaseNotes nova mitaka ReleaseNotes 概要 新特性 升级注意点 废弃列表主要针对配置项 概要 API的微版本号增加到了v2 25 新增数据库nova api 新增nova man
  • 云盘下载利器proxyee-down

    前几年360百度腾讯等大佬把用户都养成了使用云盘下载的习惯 但是后期都改为收费服务 免费的基本也都限速了 弄得大家分享下载一些资源很麻烦 一个VS神马动辄几个GB 百度100k的龟速 好吧 感谢伟大的github 感谢monkeyWie 为
  • 关于副业怎么发快手引流,教你如何把快手变成自己的副业

    快手上面的赚钱玩法也分很多种 这里蜘蛛火讲几种暴利的玩法 分别是自己拍短视频 免费送 自己直播 和打板引流 自己拍短视频 如果确定是自己拍 首先要定位一个想切入的领域 比如水果电商 很多的农民平时在家乡种的果子都很不错 但是苦于没有办法宣传
  • 数字图像处理之浮雕效果——基于傅里叶变换的频域操作

    问题简述 这是信号与系统课程的一个课后作业 要求运用傅里叶变换的理论知识 在matlab中对数字图像进行浮雕效果的处理 浮雕效果和图像边缘的检测差不多 学习过深度学习的同学可能会想到使用核对图像进行卷积操作 吴恩达老师在DeepLearni