Richardson-Lucy (RL) 算法的卷积形式推导

Richardson-Lucy 算法从模糊图像中恢复原始图像。Richardson-Lucy 方法假设观测图像的噪声服从泊松分布,是一种极大似然估计方法。

1. 问题定义

假设我们有一个原始图像 f ( x , y ) f(x,y) f(x,y),通过一个已知的点扩散函数 h ( x , y ) h(x,y) h(x,y)被模糊化,并且观测到的图像是 g ( x , y ) g(x,y) g(x,y)。数学上,这个过程可以用卷积来表示:

g ( x , y ) = ( f ∗ h ) ( x , y ) + n ( x , y ) g(x,y) = (f * h)(x,y) + n(x,y) g(x,y)=(fh)(x,y)+n(x,y)

其中, ∗ * 表示卷积操作, n ( x , y ) n(x,y) n(x,y)是加性噪声。

2. 最大似然估计

为了恢复原始图像 f ( x , y ) f(x,y) f(x,y),我们可以使用最大似然估计(MLE)。假设噪声 n ( x , y ) n(x,y) n(x,y)是泊松分布的,那么观测值 g ( x , y ) g(x,y) g(x,y)的概率密度函数可以写为:

P ( g ∣ f ) = ∏ x , y [ λ ( x , y ) ] g ( x , y ) e − λ ( x , y ) g ( x , y ) ! P(g | f) = \prod_{x,y} \frac{[\lambda(x,y)]^{g(x,y)} e^{-\lambda(x,y)}}{g(x,y)!} P(gf)=x,yg(x,y)![λ(x,y)]g(x,y)eλ(x,y)

其中 λ ( x , y ) = ( f ∗ h ) ( x , y ) \lambda(x,y) = (f * h)(x,y) λ(x,y)=(fh)(x,y)是期望值。

3. 对数似然函数

为了简化计算,通常取对数似然函数:

ln ⁡ P ( g ∣ f ) = ∑ x , y [ g ( x , y ) ln ⁡ λ ( x , y ) − λ ( x , y ) − ln ⁡ g ( x , y ) ! ] \ln P(g | f) = \sum_{x,y} \left[ g(x,y) \ln \lambda(x,y) - \lambda(x,y) - \ln g(x,y)! \right] lnP(gf)=x,y[g(x,y)lnλ(x,y)λ(x,y)lng(x,y)!]

忽略常数项,我们得到:

L ( f ) = ∑ x , y [ g ( x , y ) ln ⁡ ( f ∗ h ) ( x , y ) − ( f ∗ h ) ( x , y ) ] L(f) = \sum_{x,y} \left[ g(x,y) \ln (f * h)(x,y) - (f * h)(x,y) \right] L(f)=x,y[g(x,y)ln(fh)(x,y)(fh)(x,y)]

4. 梯度上升

为了最大化对数似然函数 L ( f ) L(f) L(f),我们需要求解梯度并进行迭代更新。梯度可以表示为:

∂ L ( f ) ∂ f ( u , v ) = ∑ x , y [ g ( x , y ) ( f ∗ h ) ( x , y ) h ( x − u , y − v ) − h ( x − u , y − v ) ] \frac{\partial L(f)}{\partial f(u,v)} = \sum_{x,y} \left[ \frac{g(x,y)}{(f * h)(x,y)} h(x-u, y-v) - h(x-u, y-v) \right] f(u,v)L(f)=x,y[(fh)(x,y)g(x,y)h(xu,yv)h(xu,yv)]

5. 迭代更新公式

根据梯度上升的思想,我们可以写出迭代更新公式:

f ( k + 1 ) ( u , v ) = f ( k ) ( u , v ) ⋅ ( h ∗ g f ( k ) ∗ h ) ( u , v ) ( h ∗ 1 ) ( u , v ) f^{(k+1)}(u,v) = f^{(k)}(u,v) \cdot \frac{(h * \frac{g}{f^{(k)} * h})(u,v)}{(h * 1)(u,v)} f(k+1)(u,v)=f(k)(u,v)(h1)(u,v)(hf(k)hg)(u,v)

这里 f ( k ) ( u , v ) f^{(k)}(u,v) f(k)(u,v)是第 k k k次迭代的结果, h ∗ 1 h * 1 h1是点扩散函数 h h h的自卷积。

6. 简化形式

在实际应用中,通常将 h ∗ 1 h * 1 h1视为常数 1,因为 h h h已经归一化了。因此,最终的迭代公式可以简化为:

f ( k + 1 ) ( u , v ) = f ( k ) ( u , v ) ⋅ ( h ∗ g f ( k ) ∗ h ) ( u , v ) f^{(k+1)}(u,v) = f^{(k)}(u,v) \cdot \left( h * \frac{g}{f^{(k)} * h} \right)(u,v) f(k+1)(u,v)=f(k)(u,v)(hf(k)hg)(u,v)

7. 初始条件和终止条件

  • 初始条件:通常选择一个平坦的初始图像 f ( 0 ) ( u , v ) f^{(0)}(u,v) f(0)(u,v)
  • 终止条件:可以通过设定迭代次数或检查图像的收敛性来确定。

在实际应用中,RL 算法可能会结合其他技术(如正则化)来防止过拟合和提高稳定性。

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

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

相关文章

网线直连模式下,ubuntu虚拟机与zynq开发板互ping

目的:想要使用网线将windows网口与zynq开发板网口直连,可以实现通过nfs(network file system)挂载在ubuntu中的根文件系统,从而运行linux,方便linux的驱动开发。 参考文章: 领航者 ZYNQ 之嵌入式 Linux 开…

深入了解 Zookeeper:原理与应用(选举篇)

在上一篇关于 Zookeeper 的介绍中,我们知晓了它在分布式系统中的关键地位以及核心的工作原理框架。今天,重点来深入探究一下 Zookeeper 集群是如何实现领导者选举这一至关重要的环节的。 一、选举触发时机 集群启动时:当一个全新的 Zookeep…

金仓数据库对象访问权限的管理

基础知识 对象的分类 数据库的表、索引、视图、缺省值、规则、触发器等等,都称为数据库对象,对象分为如下两类: 模式(SCHEMA)对象:可以理解为一个存储目录,包含视图、索引、数据类型、函数和操作符等。非模式对象:其他的数据库对象&#x…

C++并发:线程管控

1 线程基本管控 每个C程序都含有至少一个线程,即运行main()的线程,它由C运行时系统启动。随后程序可以发起更多线程,它们以别的函数作为入口。这些新线程连同起始线程并发运行。当main()返回时,程序就会退出;同样&…

网络爬虫性能提升:requests.Session的会话持久化策略

网络爬虫面临的挑战 网络爬虫在运行过程中可能会遇到多种问题,包括但不限于: IP被封禁:频繁的请求可能会被网站的反爬虫机制识别,导致IP被封。请求效率低:每次请求都需要重新建立TCP连接,导致请求效率低下…

基于华为atlas的车辆车型车牌检测识别

整体分为2个部分,也就是2个模型,车辆检测、车型检测、车牌检测这3个功能是一个基于yolov5的模型实现,车牌识别是基于PaddleOCR中的PP-OCRv3的模型实现。 车辆检测数据集制作: 车辆检测、车型检测、车牌检测的数据集主要从coco数…

打破视障壁垒,百度文心快码无障碍版本助力视障IT从业者就业无“碍”

有AI无碍 钟科:被黑暗卡住的开发梦 提起视障群体的就业,绝大部分人可能只能想到盲人按摩。但你知道吗?视障人士也能写代码。 钟科,一个曾经“被黑暗困住”的人,他的世界,因为一场突如其来的疾病&#xff0c…

pytorch torch.utils.checkpoint模块介绍

torch.utils.checkpoint 是 PyTorch 中用于实现 梯度检查点(gradient checkpointing)的模块。它通过在反向传播中 重新计算 前向传播的某些部分,以显著减少激活值的显存占用。 梯度检查点的核心原理 在前向传播中,不是保存每一层的激活值,而是保存输入和部分中间结果。在…

Spring-AI讲解

Spring-AI langchain(python) langchain4j 官网: https://spring.io/projects/spring-ai#learn 整合chatgpt 前置准备 open-ai-key: https://api.xty.app/register?affPuZD https://xiaoai.plus/ https://eylink.cn/ 或者淘宝搜: open ai key魔法…

Python-网络爬虫

随着网络的迅速发展,如何有效地提取并利用信息已经成为一个巨大的挑战。为了更高效地获取指定信息,需定向抓取并分析网页资源,从而促进了网络爬虫的发展。本章将介绍使用Python编写网络爬虫的方法。 学习目标: 理解网络爬虫的基本…

Kafka 性能提升秘籍:涵盖配置、迁移与深度巡检的综合方案

文章目录 1.1.网络和io操作线程配置优化1.2.log数据文件刷盘策略1.3.日志保留策略配置1.4.replica复制配置1.5.配置jmx服务1.6.系统I/O参数优化1.6.1.网络性能优化1.6.2.常见痛点以及优化方案1.6.4.优化参数 1.7.版本升级1.8.数据迁移1.8.1.同集群broker之间迁移1.8.2.跨集群迁…

UniApp 组件的深度运用

一、引言 在当今的移动应用开发领域,跨平台开发已成为主流趋势,而 UniApp 作为其中的佼佼者,备受开发者青睐。UniApp 的强大之处很大程度上源于其丰富且功能多样的组件体系,这些组件宛如精巧的积木,能够帮助开发者快速…

Spring Boot 中 Map 的最佳实践

在Spring Boot中使用Map时,请遵循以下最佳实践: 1.避免在Controller中 直接使用Map。应该使用RequestBody 接收-个DTO对象或者 RequestParam接收参数,然后在Service中处 理Map。 2.避免在Service中 直接使用原始的Map。应该使用Autowired 注入-个专门…

Android ActionBar 技术深度解析

Android ActionBar 技术深度解析 概述 ActionBar 是 Android 应用中的一个核心 UI 组件,用于提供导航、操作和品牌展示。它通常位于应用窗口的顶部,包含应用的标题、导航按钮、操作项等。ActionBar 自 Android 3.0(API 11)引入,并在 Android 5.0(API 21)后被 Toolbar …

【Qt】多元素控件:QListWidget、QTableWidget、QTreeWidget

目录 QListWidget 核心属性: 核心方法: 核心信号: 例子: QListWidgetItem QTableWidget 核心方法: 核心信号 QTableWidgetItem 例子: QTreeWidget 核心方法: 核心信号&#xff1a…

WebSocket 的封装使用

import { ElMessage } from "element-plus";// 全局WebSocket实例 let ws null; let isConnected false; let currentWsUrl ; // 用于存储当前的wsUrl let baseURL ws://XXX.com:8081;const initWebSocket (wsUrl, sendData) > {return new Prom…

119.【C语言】数据结构之快速排序(调用库函数)

目录 1.C语言快速排序的库函数 1.使用qsort函数前先包含头文件 2.qsort的四个参数 3.qsort函数使用 对int类型的数据排序 运行结果 对char类型的数据排序 运行结果 对浮点型数据排序 运行结果 2.题外话:函数名的本质 1.C语言快速排序的库函数 cplusplus网的介绍 ht…

vulnhub靶机billu_b0x精讲

靶机下载 https://www.vulnhub.com/entry/billu-b0x,188/ 信息收集 扫描存活主机 nmap -sP 192.168.73.0/24 192.168.73.141为目标主机,对其进行进一步信息收集 端口扫描 nmap --min-rate10000 -p- 192.168.73.141 目标只开放了22和80端口 针对端口进行TCP探…

react相关报错--持续更新中

日常项目报错记录 一、开源项目问题集合安装依赖和启动问题1. 启动时候报The react-scripts package provided by Create React App requires a dependency: "babel-loader": "8.1.0"问题解决方法1:解决方法2: 二、reactAnt Design使用遇到的问题1. 使用ta…

vue实现下拉多选、可搜索、全选功能

最后的效果就是树形的下拉多选&#xff0c;可选择任意一级选项&#xff0c;下拉框中有一个按钮可以实现全选&#xff0c;也支持搜索功能。 在mounted生命周期里面获取全部部门的数据&#xff0c;handleTree是讲接口返回的数据整理成树形结构&#xff0c;可以自行解决 <div c…