第5章 Python 数字图像处理(DIP) - 图像复原与重建16 - 约束最小二乘方滤波、几何均值滤波

标题

    • 约束最小二乘方滤波
    • 几何均值滤波

约束最小二乘方滤波

F^(u,v)=[H∗(u,v)∣H(u,v)∣2+γ∣P(u,v)∣2]G(u,v)(5.89)\hat{F}(u,v) = \bigg[\frac{H^*(u,v)}{|H(u,v)|^2 + \gamma |P(u,v)|^2} \bigg]G(u,v) \tag{5.89}F^(u,v)=[H(u,v)2+γP(u,v)2H(u,v)]G(u,v)(5.89)

P(u,v)为函数p(x,y)=[0−10−14−10−10]P(u,v) 为函数 p(x, y) = \begin {bmatrix}0 & -1 & 0 \\ -1 & 4 & -1 \\ 0 & -1 & 0 \end {bmatrix}P(u,v)p(x,y)=010141010的傅里叶变换

我们认为这个函数是一个拉普拉斯核,注意式中在γ=0\gamma = 0γ=0时会简化为逆滤波。

函数P(u,v)和H(u,v)P(u,v)和H(u,v)P(u,v)H(u,v)的大小必须相同。意味着p(x,y)p(x,y)p(x,y)必须嵌入MMM x NNN 零阵列的中心。为保持p(x,y)p(x,y)p(x,y)的偶对称, MMMNNN必须是偶整数。如果由其获得HHH的一幅已知退化图像不是偶数维的,则在计算HHH之前需要酌情删除一行和/或一行,以便可以使用

2021-21-16 update, Thanks to fans id is ‘weixin_42674476’。

def get_puv(image):h, w = image.shape[:2]h_pad, w_pad = h - 3, w - 3p_xy = np.array([[0, -1, 0],[-1, 4, -1],[0, -1, 0]])p_pad = np.pad(p_xy, ((h_pad//2, h_pad - h_pad//2), (w_pad//2, w_pad - w_pad//2)), mode='constant')p_uv = np.fft.fft2(p_pad)return p_uv
def least_square_filter(image, PSF, eps, gamma=0.01):"""least square filter for image denoise, math: $$\hat{F}(u,v) = \bigg[\frac{H^*(u,v)}{|H(u,v)|^2 + \gamma |P(u,v)|^2} \bigg]G(u,v)$$param: image: input imageparam: PSF: input the PSF maskparam: eps: epsilonparam: gamma: gamma value for least square filter fuctionreturn image after least square filter问题:为什么改变gamma值结果也没有变化,sorted 2021-12-16"""fft = np.fft.fft2(image)PSF_fft = np.fft.fft2(PSF)conj = PSF_fft.conj()p_uv = get_puv(image)abs_conj = np.abs(PSF_fft) ** 2# abs_conj = (PSF_fft * conj).realhuv = conj / (abs_conj + gamma * (np.abs(p_uv) ** 2))result = np.fft.ifft2(fft * huv)result = np.abs(np.fft.fftshift(result))return result, abs_conj
# 约束最小二乘方滤波
image = cv2.imread("DIP_Figures/DIP3E_Original_Images_CH05/Fig0526(a)(original_DIP).tif", 0)
PSF = get_motion_dsf(image.shape[:2], -50, 100)
blurred = make_blurred(image, PSF, 1e-5)wiener = wiener_filter(blurred, PSF, 1e-5, K=0.03)     
least_square, abs_con = least_square_filter(blurred, PSF, 1e-5, gamma=1e-6)
least_square = np.uint8(normalize(least_square) * 255)img_diff = image - least_square
plt.figure(figsize=(15, 5))
plt.subplot(131), plt.imshow(blurred, 'gray'), plt.title("Motion blurred"), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.imshow(wiener, 'gray'), plt.title("Wiener Filter"), plt.xticks([]), plt.yticks([])
plt.subplot(133), plt.imshow(least_square, 'gray'), plt.title("Least Square Filter"), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

几何均值滤波

F^(u,v)=[H∗(u,v)∣H(u,v)∣2]α[H∗(u,v)∣H(u,v)∣2+β[Sη(u,v)Sf(u,v)]]1−αG(u,v)(5.99)\hat{F}(u,v) = \bigg[\frac{H^*(u,v)}{|H(u,v)|^2}\bigg]^\alpha \Bigg[\frac{H^*(u,v)}{|H(u,v)|^2 + \beta \big[\frac{S_{\eta}(u,v)}{S_f(u,v)} \big]}\Bigg]^{1-\alpha} G(u, v) \tag{5.99}F^(u,v)=[H(u,v)2H(u,v)]α[H(u,v)2+β[Sf(u,v)Sη(u,v)]H(u,v)]1αG(u,v)(5.99)

α和β\alpha 和 \betaαβ 是非负的实常数。

α=1\alpha=1α=1时,几何均值滤波器简化为逆滤波器;当α=0\alpha=0α=0时,几何均值滤波器变为参数维纳滤波器,参数维纳滤波器在β=1\beta=1β=1时简化为标准维纳滤波器;当α=1/2\alpha=1/2α=1/2时几何均值滤波器变成幂次相同的两个量的乘积,这就是几何均值的定义。

β=1\beta=1β=1α\alphaα大于1/2时,滤波器更的性能更像逆滤波器。
α\alphaα 小于1/2时,滤波器的性能更像维纳滤波器。
α\alphaα 等于1/2且β=1\beta=1β=1时,滤波器通常称为频谱均衡滤波器。

def geometric_mean_filter(image, PSF, eps, K=1, alpha=1, beta=1):"""geometric mean filter for image denoise, math: $$\hat{F}(u,v) = \bigg[\frac{H^*(u,v)}{|H(u,v)|^2}\bigg]^\alpha \Bigg[\frac{H^*(u,v)}{|H(u,v)|^2 + \beta \big[\frac{S_{\eta}(u,v)}{S_f(u,v)} \big]}\Bigg]^{1-\alpha} G(u, v) $$param: image: input imageparam: PSF  : input the PSF maskparam: eps  : epsilonparam: K    : K equal to math: \frac{S_{\eta}(u,v)}{S_f(u,v)}param: alpha: alpha value for filter fuctionparam: beta : beta value for the filter fuctionreturn image after least square filter"""fft = np.fft.fft2(image)PSF_fft = np.fft.fft2(PSF)conj = PSF_fft.conj()abs_square = (PSF_fft * conj).realhuv = np.power(conj / (abs_square), alpha) * np.power(conj / (abs_square + beta*(K)), 1 - alpha)result = np.fft.ifft2(fft * huv)result = np.abs(np.fft.fftshift(result))return result
#### 几何均值滤波器
image = cv2.imread("DIP_Figures/DIP3E_Original_Images_CH05/Fig0526(a)(original_DIP).tif", 0)
PSF = get_motion_dsf(image.shape[:2], -50, 100)
blurred = make_blurred(image, PSF, 1e-5)wiener = wiener_filter(blurred, PSF, 1e-5, K=0.03)     
geometric_mean = geometric_mean_filter(blurred, PSF, 1e-5, K=1, alpha=1/2, beta=0)
geometric_mean = np.uint8(normalize(geometric_mean) * 255)plt.figure(figsize=(14, 5))
plt.subplot(131), plt.imshow(blurred, 'gray'), plt.title("Motion blurred"), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.imshow(wiener, 'gray'), plt.title("Wiener Filter"), plt.xticks([]), plt.yticks([])
plt.subplot(133), plt.imshow(geometric_mean, 'gray'), plt.title("Geometric mean Filter"), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

securecrt是什么工具_比较一下几款常用的SSH工具

WX众号:基因学苑Q群:32798724更多精彩内容等你发掘!编者按工欲善其事,必先利其器。作为生物信息分析人员,每天都需要通过SSH工具远程登录服务器,那么使用一款高效的连接工具就很有必要。这次我们来点评一下…

华为手机如何调时间显示_华为手机照片如何出现时间地点天气,教你30秒,一学就会...

阅读本文前,请您先点击上面的“蓝色字体”,再点击“关注”,这样您就可以继续免费收到文章了。每天都会有分享,都是免费订阅,请您放心关注。 …

第5章 Python 数字图像处理(DIP) - 图像复原与重建17 - 由投影重建图像、雷登变换、投影、反投影、反投影重建

标题由投影重建图像投影和雷登变换 Johann Radon反投影滤波反投影重建由投影重建图像 本由投影重建图像,主要是雷登变换与雷登把变换的应用,所以也没有太多的研究,只为了保持完整性,而添加到这里。 # 自制旋转投影图像# 模拟一个…

day12-nginx

nginx 前台服务器并发大 安装nginx useradd –s /sbin/nologin nginx tar xf nginx-xxx.tar.gz yum install –y gcc pcre-devel openssl-devel ./configure --prefix/etc/nginx --usernginx --groupnginx --with-http_ssl_module --http-log-path/var/log/nginx/access.…

python args_Python可变参数*args和**kwargs用法实例小结

本文实例讲述了Python可变参数*args和**kwargs用法。分享给大家供大家参考,具体如下: 一句话简单概括:当函数的参数不确定的时候就需要用到*args和**kwargs,前者和后者的区别在于,后者引入了”可变”key的概念&#xf…

php调用c++

1.在/var/www中建个测试文件夹 cpp 在此文件夹中新建c文件sort.cpp,如下 编译并测试执行通过进行以下步骤。 2.在cpp文件夹下新建文件cpp.html,如下 3.同样在cpp下建php文件cpp.php,如下 保存。 4.程序执行如下 提交后: 转载于:ht…

AI+无线通信——Top7 (Baseline)分享与总结

从浩哥那里转载 https://wanghao.blog.csdn.net/article/details/115813954 比赛已经告一段落,现在我们队兑现承诺,将比赛方案开源给大家,互勉互助,共同进步。 队伍介绍 我们的队伍名是Baseline,我们因分享Baseline…

tornado post第3方_[33]python-Web-框架-Tornado

1.TornadoTornado:python编写的web服务器兼web应用框架1.1.Tornado的优势轻量级web框架异步非阻塞IO处理方式出色的抗负载能力优异的处理性能,不依赖多进程/多线程,一定程度上解决C10K问题WSGI全栈替代产品,推荐同时使用其web框架…

android 串口调试工具_树莓派通用串口通信实验

一、介绍对于树莓派 3B来说,他的UART功能有三种:1、内部蓝牙使用;2、控制终端使用;3、与其他设备进行串口通信。在树莓派USB TO TTL模块实验中学习了通过串口对树莓派进行控制台控制,让串口作为控制终端调试口即 seria…

ichat在线客服jQuery插件(可能是历史上最灵活的)

ichat是一款开源免费在线客服jQuery插件,通过该插件,您可以自由的定制属于自己的在线客服代码。 ichat充分吸收传统在线客服插件的优点,并加上自身的独特设计,使得ichat可定制性异常强大。 ichat追求简单实用,走小清新…

第6章 Python 数字图像处理(DIP) - 彩色图像处理1 - RGB彩色模型,RGB to Gray,CMK和CMYK彩色模型,HSI彩色模型

第6章主要讲的是彩色图像处理,一些彩色模型如RGB,CMK,CMYK,HSI等色彩模型;彩色模型的变换关系;还包含由灰度图像怎样处理成假彩色图像;使用彩色分割图像等。本章比较少理论还有变换的描述&#…

git 命令详解_再次学习Git版本控制工具

微信公众号:PHP在线Git 究竟是怎样的一个系统呢?为什么在SVN作为版本控制工具已经非常流行的时候,还有Git这样一个版本控制工具呢?Git和SVN的区别在哪儿呢?Git优势又在哪呢?下面PHP程序员雷雪松带你一起详细…

spring-boot 定时任务

2019独角兽企业重金招聘Python工程师标准>>> 1、建立项目 SpringBootApplication EnableAsync EnableScheduling EnableAutoConfiguration(exclude{ DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class}) ImportResource(…

使用Lightbox制作照片条

前言:这是国外的一个教程,我也很喜欢这个网页里面的教程,主要技术是CSS3和JQuery以及一些JQuery的插件的应用,当然从这些教程我也学到了他们制作时的一些思路,就好像做数学题那样,只要思路把握了&#xff0…

第6章 Python 数字图像处理(DIP) - 彩色图像处理2 - 灰度分层(灰度分割)和彩色编码,灰度值到彩色变换,Gray to RGB

第6章主要讲的是彩色图像处理,一些彩色模型如RGB,CMK,CMYK,HSI等色彩模型;彩色模型的变换关系;还包含由灰度图像怎样处理成假彩色图像;使用彩色分割图像等。本章比较少理论还有变换的描述&#…

值重新赋值_JavaScript-赋值运算符

好好学习,天天向上赋值运算符赋值运算符必须有变量参与运算,赋值运算符会做两件事情第一,将变量中原始值参与对应数学运算,与右侧的数据第二,将运算结果再重新赋值给变量变量位于操作符的左侧赋值运算符符号&#xff1…

超声换能器的原理及设计_超声波发生器、变幅杆、焊头的匹配介绍

一.超声波换能器原理与设计(超声波振动系统)匹配摘要:就塑料焊接机的超声波换能器系统进行设计和计算,并用PRO- E 三维软件绘出三维模型,最后进行频率分析,为超声波换能系统提供了有用的设计方法。关键词:超声波换能器…

位图法

判断集合中存在重复是常见编程任务之一,当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循环法就不可取了。位图法比较适合于这种情况,它的做法是按照集合中最大元素max创建一个长度为max1的新数组,然后再次扫描原数组…

CentOS查看和修改PATH环境变量的方法

为什么80%的码农都做不了架构师?>>> 查看PATH:echo $PATH 以添加mongodb server为列 修改方法一: export PATH/usr/local/mongodb/bin:$PATH //配置完后可以通过echo $PATH查看配置结果。 生效方法:立即生效 有效期限…

IOS简单的登陆界面

主要需要注意的几个问题: 1.导入图片方式最好用文件导入 代码: 在ViewController.m文件中 2.UILable常用属性 property(nonatomic,copy) NSString *text; //设置文本内容 property(nonatomic,retain) UIFont *font; //设置字体 …