当前位置: 首页 > article >正文

图像对比度调整(局域拉普拉斯滤波)

一、背景介绍

        之前刷对比度相关调整算法,找到效果不错,使用局域拉普拉斯做图像对比度调整,尝试复现和整理了下相关代码。

二、实现流程

1、基本原理

        对输入图像进行高斯金字塔拆分,对每层的每个像素都针对性处理,生产一组拉普拉斯金字塔图像,再图像重建,得到结果图像。

        具体处理上:

        a、针对每个像素点,以它原图位置为中心,在原图上取窗口区域ROI1。

        b、以当前高斯层的当前像素和它对应ROI1为输入,根据预定公式得到细节和对比度调整后的原图窗口图像ROI2。

        c、对ROI2进行和高斯金字塔一样层数的拉普拉斯金字塔拆分。

        d、 取当前拉普拉斯金字塔里面和当前处理像素所在高斯金字塔一样层数,一样位置的像素,作为最终生成的拉普拉斯图像对应层和对应位置的信息填充。

        具体算法细节上,已经有很多大佬讲过了,我这里就不特别展开了,感兴趣的小伙伴们可以参考:我为什么不是博士:局部拉普拉斯滤波(local laplican filter)

        另外由于该算法复杂度奇高,实际工作中基本上没法用起来,对这个算法其实有不少性能优化方案,比如可以参考:深度优化局部拉普拉斯金字塔滤波器。 不过我这里主要是学习为主了,后面有兴趣再复现它性能版本。

2、代码流程

        a、输入图像处理,生产对应高斯金字塔。

        b、对高斯金字塔每层和每个像素都逐个遍历处理(没有顺序依赖关系,可以随意并行处理)。

        根据如下流程,生成得到结果图像:

                1)获取高斯金字塔1中某个像素。

                2)该像素在原图位置为中心,从原图2中截取图像区域块,得到图像3。

                3)对图像3根据论文公式做纹理/对比度调整,得到图像4。

                4)对图像4进行拉普拉斯金字塔拆分得到局域块拉普拉斯5。

                5)根据高斯金字塔1上当前原始像素所在层数和像素位置,在拉普拉斯金字塔6上,同样对应层对应位置上,使用拉普拉斯5上对应层中心位置像素值填充。

                6)重复步骤2-5,遍历高斯金字塔1上所有像素,更新完所有拉普拉斯6像素值。

                7)对拉普拉斯6进行金字塔图像重建,得到最终结果图像7。

 

三、效果展示

        左边为输入图,右边是对比度调整后图像:

 

四、复现代码

        原始的复现代码路径如下:

        GitHub - psalvaggio/local_laplacian_filters: Local Laplacian Filters​        github.com/psalvaggio/local_laplacian_filters/tree/master

        我这边从里面抽取了下必要核心模块,整理地址如下:

        https://github.com/yulinghan/ImageQualityEnhancement/tree/master/ltm/Local_Laplacian_Filter​github.com/yulinghan/ImageQualityEnhancement/tree/master/ltm/Local_Laplacian_Filter

相关文章:

图像对比度调整(局域拉普拉斯滤波)

一、背景介绍 之前刷对比度相关调整算法,找到效果不错,使用局域拉普拉斯做图像对比度调整,尝试复现和整理了下相关代码。 二、实现流程 1、基本原理 对输入图像进行高斯金字塔拆分,对每层的每个像素都针对性处理,生产…...

如何在本地打包 StarRocks 发行版

字数 615,阅读大约需 4 分钟 最近我们在使用 StarRocks 的时候碰到了一些小问题: • 重启物化视图的时候会导致视图全量刷新,大量消耗资源。- 修复 PR:https://github.com/StarRocks/starrocks/pull/57371• excluded_refresh_tab…...

git使用的DLL错误

安装好git windows客户端打开git bash提示 Error: Could not fork child process: Resource temporarily unavailable (-1). DLL rebasing may be required; see ‘rebaseall / rebase –help’. 提示 MINGW64的DLL链接有问题,其实是Windows的安全中心限制了&…...

Elasticsearch倒排索引核心原理面试题

倒排索引核心原理面试题 🚀 目录 基础概念性能优化应用场景数据结构设计问题排查扩展思考基础概念 🔍 面试题1:基础概念 题目:Elasticsearch/Lucene的倒排索引(Inverted Index)是如何工作的?请描述从关键词搜索到返回文档的完整流程。 👉 查看参考答案 倒排索引…...

区块链blog1__合作与信任

🍂我们的世界 🌿不是孤立的,而是网络化的 如果是单独孤立的系统,无需共识,而我们的社会是网络结构,即结点间不是孤立的 🌿网络化的原因 而目前并未发现这样的理想孤立系统,即现实中…...

从数据包到可靠性:UDP/TCP协议的工作原理分析

之前我们已经使用udp/tcp的相关接口写了一些简单的客户端与服务端代码。也了解了协议是什么,包括自定义协议和知名协议比如http/https和ssh等。现在我们再回到传输层,对udp和tcp这两传输层巨头协议做更深一步的分析。 一.UDP UDP相关内容很简单&#xf…...

【CanMV K230】AI_CUBE1.4

《k230-AI 最近小伙伴有做模型的需求。所以我重新捡起来了。正好把之前没测过的测一下。 这次我们用的是全新版本。AICUBE1.4.dotnet环境9.0 注意AICUBE训练模型对硬件有所要求。最好使用独立显卡。 有小伙伴说集显也可以。emmmm可以试试哈 集显显存2G很勉强了。 我们依然用…...

vscode 默认环境路径

目录 1.下面放在项目根目录上: 2.settings.json内容: 自定义conda环境断点调试 启动默认参数: 1.下面放在项目根目录上: .vscode/settings.json 2.settings.json内容: {"python.analysis.extraPaths"…...

支付宝授权登录

支付宝授权登录 一、场景 支付宝小程序登录,获取用户userId 二、注册支付宝开发者账号 1、支付宝开放平台 2、点击右上角–控制台,创建小程序 3、按照步骤完善信息,生成密钥时会用到的工具 4、生成的密钥,要保管好&#xff…...

Fabric 服务端插件开发简述与聊天事件监听转发

原文链接&#xff1a;Fabric 服务端插件开发简述与聊天事件监听转发 < Ping通途说 0. 引言 以前写过Spigot的插件&#xff0c;非常简单&#xff0c;仅需调用官方封装好的Event类即可。但Fabric这边在开发时由于官方文档和现有互联网资料来看&#xff0c;可能会具有一定的误…...

认识Docker/安装Docker

一、认识Docker Docker的定义 Docker 是一个开源的应用容器引擎&#xff0c;允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。容器化技术使得应用可以在任何支持 Docker 的环境中运行&#xff0c;确保环境一致性。 Docker的核心组件 Docker Engine&#xff1a;负责…...

电商物流管理优化:从网络重构到成本管控的全链路解析

大家好&#xff0c;我是沛哥儿。作为电商行业&#xff0c;我始终认为物流是电商体验的“最后一公里”&#xff0c;更是成本控制的核心战场。随着行业竞争加剧&#xff0c;如何通过物流网络优化实现降本增效&#xff0c;已成为电商企业的必修课。本文将从物流网络的各个环节切入…...

Unity:延迟执行函数:Invoke()

目录 Unity 中的 Invoke() 方法详解 什么是 Invoke()&#xff1f; 基本使用方法 使用要点 延伸功能 ❗️Invoke 的局限与注意事项 在Unity中&#xff0c;延迟执行函数是游戏逻辑中常见的需求&#xff0c;比如&#xff1a; 延迟切换场景 延迟播放音效或动画 给玩家时间…...

移植RTOS,发现任务栈溢出怎么办?

目录 1、硬件检测方法 2、软件检测方法 3、预防堆栈溢出 4、处理堆栈溢出 在嵌入式系统中&#xff0c;RTOS通过管理多个任务来满足严格的时序要求。任务堆栈管理是RTOS开发中的关键环节&#xff0c;尤其是在将RTOS移植到新硬件平台时。堆栈溢出是嵌入式开发中常见的错误&am…...

k8s部署实战-springboot应用部署

在 Kubernetes 上部署 SpringBoot 应用实战指南 前言 本文将详细介绍如何将一个 SpringBoot 应用部署到 Kubernetes 集群中,包括制作镜像、编写部署文件、创建服务等完整步骤。 准备工作 1. 示例 SpringBoot 应用 假设我们有一个简单的 SpringBoot 应用,提供 REST API 服…...

【设计模式】- 结构型模式

代理模式 给目标对象提供一个代理以控制对该对象的访问。外界如果需要访问目标对象&#xff0c;需要去访问代理对象。 分类&#xff1a; 静态代理&#xff1a;代理类在编译时期生成动态代理&#xff1a;代理类在java运行时生成 JDK代理CGLib代理 【主要角色】&#xff1a; 抽…...

《Vuejs设计与实现》第 5 章(非原始值响应式方案) 中

目录 5.4 合理触发响应 5.5 浅响应与深响应 5.6 只读和浅只读 5.4 合理触发响应 为了合理触发响应,我们需要处理一些问题。 首先,当值没有变化时,我们不应该触发响应: const obj = { foo: 1 } const p = new Proxy(obj, { /* ... */ })effect(() => {console.log(p…...

rk3576 gstreamer opencv

安装gstreamer rk3588使用gstreamer推流_rk3588 gstreamer-CSDN博客 rk3588使用gstreamer推流_rk3588 gstreamer-CSDN博客 Installing on Linux sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-pl…...

数据服务共享平台方案

该文档聚焦数据服务共享平台方案,指出传统大数据管理存在数据定义不统一、开发困难、共享不足等挑战,提出通过自服务大数据平台实现数据 “采、存、管、用” 全流程优化,涵盖数据资产管理、自助数据准备、服务开发与共享、全链路监控等功能,并通过国家电网、东方航空、政府…...

skywalking使用教程

skywalking使用教程 一、介绍 skywalking 1.1 概念 skywalking是分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Docker、K8s、Mesos&#xff09;架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统&#xff0c;提供分布…...

C 语 言 - - - 简 易 通 讯 录

C 语 言 - - - 简 易 通 讯 录 代 码 全 貌 与 功 能 介 绍通 讯 录 的 功 能 说 明通 讯 录 效 果 展 示代 码 详 解contact.hcontact.ctest.c 总 结 &#x1f4bb;作 者 简 介&#xff1a;曾 与 你 一 样 迷 茫&#xff0c;现 以 经 验 助 你 入 门 C 语 言 &#x1f4a1;个 …...

大模型MCP之UV安装使用

1.Windows安装 1.1 pip安装 pip install uv -i https://pypi.tuna.tsinghua.edu.cn/simple如果需要centos安装pip sudo yum install python3-pipCentOS 8开始使用dnf作为包管理器&#xff1a; sudo dnf install python3-pip对于基于Debian的系统&#xff08;如Ubuntu&#…...

【C++】多线程和多进程

在C++中,多线程通信(同一进程内的线程间交互)和进程间通信(IPC,不同进程间的数据交换)是构建并发系统的核心技术。以下是两种通信机制的详细介绍和典型实现: 一、多线程通信(线程间同步与数据共享) 1. 共享内存与同步原语 通过全局变量或对象成员变量实现数据共享,…...

Vue百日学习计划Day16-18天详细计划-Gemini版

重要提示&#xff1a; 番茄时钟&#xff1a; 每个番茄钟为25分钟学习&#xff0c;之后休息5分钟。每完成4个番茄钟&#xff0c;进行一次15-30分钟的长休息。动手实践&#xff1a; DOM 操作和事件处理的理解高度依赖于实际编码。请务必在浏览器中创建 HTML 页面&#xff0c;并配…...

从验证码绕过到信息轰炸:全面剖析安全隐患与防范策略

在数字化交互场景中&#xff0c;验证码作为区分人类操作与自动化程序的核心屏障&#xff0c;广泛应用于用户身份核验、操作权限确认等关键环节。其设计初衷是通过人机识别机制&#xff0c;保障信息系统交互的安全性与可控性。然而&#xff0c;当验证码验证机制出现异常突破&…...

机器学习知识自然语言处理入门

一、引言&#xff1a;当文字遇上数学 —— 自然语言的数字化革命 在自然语言处理&#xff08;NLP&#xff09;的世界里&#xff0c;计算机要理解人类语言&#xff0c;首先需要将文字转化为数学向量。早期的 One-Hot 编码如同给每个词语分配一个唯一的 “房间号”&#xff0c;例…...

LeetCode 820 单词的压缩编码题解

LeetCode 820 单词的压缩编码题解 题目描述 题目链接 给定一个单词列表&#xff0c;将其编码为一个索引字符串S&#xff0c;格式为"单词1#单词2#…"。要求当某个单词是另一个单词的后缀时&#xff0c;该单词可以被省略。求最终编码字符串的最小长度。 解题思路 逆…...

论信息系统项目的范围管理

论信息系统项目的范围管理 前言一、规划范围管理&#xff0c;收集需求二、定义范围三、创建工作分解结构四、确认范围五、控制范围 前言 为了应对烟草零售客户数量大幅度增长所带来的问题&#xff0c;切实履行控烟履约的相关要求&#xff0c;同时也为了响应国务院“放管服”政策…...

MySQL数据库——支持远程IP访问的设置方法总结

【系列专栏】&#xff1a;博主结合工作实践输出的&#xff0c;解决实际问题的专栏&#xff0c;朋友们看过来&#xff01; 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实…...

Pageassist安装(ollama+deepseek-r1)

page-assist网站&#xff1a;https://github.com/n4ze3m/page-assist 首先电脑配置node.js&#xff0c;管理员打开命令窗口输入下面命令下载bun npm install -g buncd 到你想要安装page-assist的地方&#xff08;推荐桌面&#xff09; 输入下列命令 git clone https://gith…...