[数字图像处理]直方图规定化
这里分别使用基于像素手动计算、调用工具箱函数两种方法实现直方图规定化
1.基于像素进行直方图规定化
(1)读取了原始图像和期望图像,并将它们转换为灰度图像
(2)计算原始图像和期望图像的像素概率分布直方图P(i)和P(j),并统计它们的累积直方图Pi和Pj
(3)根据原始图像和期望图像的累积直方图,找到使Pi/Pj误差最小的映射关系
(4)对原始图像进行直方图规定化,展示原始图像、期望图像及规定化后的图像
代码:
%直方图规定化
I0=imread("C:\Users\Desktop\图像1.jpg");
I=rgb2gray(I0);
I1=rgb2gray(I0);
G=imread("C:\Users\Desktop\期望图像0.jpg");
G2=rgb2gray(G);
%计算原图像的长宽
[x,y]=size(I);
%创建数组存储像素概率
p=zeros(1,256)
%统计每个像素值出现的概率
for i=0:255
%length计算相同像素的个数
p(i+1)=length(find(I==i))/(x*y);
end
%输出原图及原图直方图
figure,
subplot(331),imshow(I);
title('原图')
subplot(332);
bar(0:255,p,'b')
title('原图直方图');
%求累计概率,得到累积直方图
s=zeros(1,256)
for i=1:256
for j=1:i
s(i)=p(j)+s(i);
end
end
subplot(333);
bar(0:255,s,'b');
title('原图累积直方图');
%计算期望图像的长宽
[a,b]=size(G2);
%创建数组存储像素概率
z=zeros(1,256)
%统计每个像素值出现的概率
for i=0:255
%length计算相同像素的个数
z(i+1)=length(find(G2==i))/(a*b);
end
%输出期望图像及直方图
subplot(334),imshow(G2);
title('期望图像')
subplot(335);
bar(0:255,z,'b')
title('期望图像直方图');
%求累计概率,得到累积直方图
h=zeros(1,256)
for i=1:256
for j=1:i
h(i)=z(j)+h(i);
end
end
subplot(336);
bar(0:255,h,'b');
title('期望图像累积直方图');
new_I=zeros(256,1,'uint8');
%按照[Pj/Pi]误差最小,查找i对应的j
for i=1:1:256
min=abs(s(i)-h(1));
for j=1:1:256
if(abs(s(i)-h(j))<min)
min=abs(s(i)-h(j));
new_I(i)=j;
end
end
end
% 应用映射关系进行直方图规定化
new_Img = zeros(size(I1));
for i = 1:256
new_Img(I1==i)=new_I(i);
end
[x,y]=size(new_Img);
p1=zeros(1,256)
for i=0:255
p1(i+1)=length(find(new_Img==i))/(x*y);
end
subplot(337)
imshow(uint8(new_Img)); % 使用uint8()函数将图像数据转换为无符号整数类型
title('规定化的图像');
subplot(338)
bar(0:255,p1,'b');
title('直方图规定化');
%求累计概率,得到累积直方图
p11=zeros(1,256)
for i=1:256
for j=1:i
p11(i)=p(j)+p11(i);
end
end
subplot(339);
bar(0:255,p11,'b');
title('规定图像后的累积直方图');
2.调用工具箱函数实现直方图规定化
实现直方图规定化的语法为:g=histeq(f,hspec)
其中,f为输入图像,hspec为规定的直方图,g为输出图像,输出图像的直方图近似于指定的直方图hspec。首先读取了一张灰度图片,然后定义了一个灰度级范围hgram,范围从50到250。接着使用histeq函数对原始图像G进行直方图规定化,得到规定化后的图像I_histeq。
代码:
%直方图规定化
G=imread('C:\Users\Desktop\灰度图片.jpg');
hgram=50:2:250
%使用histeq函数进行规定化
I_histeq=histeq(G,hgram);
figure,
subplot(221),imshow(G);
title('原图')
subplot(222),imhist(G);
title('原图直方图')
subplot(223),imshow(I_histeq);
title('规定化图像')
subplot(224),imhist(I_histeq);
title('规定化图像直方图')
图1为通过手动计算调整原始图像的像素值分布,使其尽可能接近期望图像的像素值分布,从而实现图像的直方图规定化的结果。原始图像的直方图可能比较集中,显示较低的对比度和动态范围。而期望图像的直方图覆盖了更广泛的像素值范围,有更高的对比度和动态范围。规定化后的图像直方图与期望图像的直方图更加相似,可以看到原始图像人物脸部区域较亮,对比度较高,而期望图像整体较暗,对比度较低,通过规定化处理后,图像对比度降低,可以明显发现人物脸部区域变暗。
图2为调用工具包函数实现的直方图规定化结果。通过使用工具包中的函数调整图片的对比度和亮度。自定义期望直方图(hgram=50:2:250)使调整的图像像素均匀分布在50-250之间,经过规定化处理,可以发现规定化后的图像对比度和亮度增强。
相关文章:
[数字图像处理]直方图规定化
这里分别使用基于像素手动计算、调用工具箱函数两种方法实现直方图规定化 1.基于像素进行直方图规定化 (1)读取了原始图像和期望图像,并将它们转换为灰度图像 (2)计算原始图像和期望图像的像素概率分布直方图P(i)和…...
OpenMCU(一):STM32F407 FreeRTOS移植
概述 本文主要描述了STM32F407移植FreeRTOS的简要步骤。移植描述过程中,忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_FreeRTOS这个工程,该工程已经下载放好了移植stm32f407 FreeRTOS的所有文件 OpenMCU_FreeRTOS工…...
Redis - 高可用实现方案解析:主从复制与哨兵监控
文章目录 Pre概述Redis 高可用实现方案一、主从复制机制1.1 全量同步流程1.2 增量同步(PSYNC)流程 二、哨兵监控机制2.1 故障转移时序流程 三、方案对比与选型建议四、生产环境实践建议 Pre Redis-入门到精通 Redis进阶系列 Redis进阶 - Redis主从工作…...
SPI硬件设计及通信原理解析
SPI(Serial Peripheral interface,串行外围设备接口),是一种高速的,全双工,同步通信总线。 SPI采用主从控制模式(Master--Slave)架构,一般有1个主设备、一个或多个从设备,使得主设备可以与多个从设备之间实现片间通信。 SPI在芯片管脚中只占用四根线节约了芯片的管脚…...
腾讯云物联网平台(IoT Explorer)设备端使用
1、直接看图流程 2、跑起来demo,修改产品id,设备名称,设备秘钥。 3、连接部分 4、修改默认地址和端口 sdk里面的地址默认是带着产品ID拼接的,咱们现在中铁没有泛域名解析,要改下这里。把+productID都去掉,然后地址里的.也去掉。...
elk的相关的基础
以下是关于ELK(Elasticsearch, Logstash, Kibana)的200个基础问题及其答案,涵盖了ELK的核心概念、组件、配置、使用场景、优化等方面。 Elasticsearch 基础 **什么是Elasticsearch?** 答:Elasticsearch是一个分…...
结合PyMuPDF+pdfplumber,删除PDF指定文本后面的内容
🚀 一、需求场景解析 在日常办公中,我们经常会遇到这样的痛点: 合同处理:收到上百份PDF合同,需要找到"签署页"之后的内容并删除报表加工:批量移除财务报表中的敏感数据区域文档归档:快速提取技术文档的关键章节传统的手动操作方式存在三大致命缺陷: ❗ 耗时…...
张驰咨询:用六西格玛重构动力电池行业的BOM成本逻辑
在动力电池行业,BOM(物料清单)成本每降低1%,都可能改写企业的利润曲线。某头部企业的三元锂电池BOM成本曾较行业标杆高出11%,单电芯利润率被压缩至3%的生死线。然而,通过张驰咨询的六西格玛方法论ÿ…...
【深度学习CV】【图像分类】从CNN(卷积神经网络)、ResNet迁移学习到GPU高效训练优化【案例代码】详解
摘要 本文分类使用的是resNet34,什么不用yolo v8,yolo v10系列,虽然他们也可以分类,因为yolo系列模型不纯粹,里面包含了目标检测的架构,所以分类使用的是resNet 本文详细介绍了三种不同的方法来训练卷积神经网络进行 CIFAR-10 图…...
《基于HarmonyOS NEXT API 12+,搭建新闻创作智能写作引擎》
在信息爆炸的时代,新闻行业对于内容生产的效率和质量有着极高的要求。AI技术的发展为新闻创作带来了新的变革契机,借助AI智能写作助手,新闻工作者可以快速生成新闻稿件的初稿,大大提高创作效率。本文将基于HarmonyOS NEXT API 12及…...
python代码注释方式
在 Python 中,注释是用于解释代码、提高代码可读性和可维护性的重要工具。Python 支持两种主要的注释方式:单行注释和多行注释。此外,Python 还支持文档字符串(docstrings),用于为模块、函数、类和方法提供…...
小哆啦解题记:螺旋矩阵
小哆啦开始刷力扣的第二十八天 54. 螺旋矩阵 - 力扣(LeetCode) 🌪️ 一场螺旋风暴的较量 在一个阳光明媚的午后,小哆啦悠闲地坐在窗边啃着曲奇,突然,一道神秘的光芒闪过,小智从代码的虚空中出现…...
【C#】委托是什么
在 C# 中,委托(Delegate) 是一种类型安全的函数指针,可以将方法作为参数传递或者保存方法的引用。下面详细介绍一下委托的相关概念和用法: 1. 基本概念 类型安全:委托在声明时会指定方法的返回类型和参数…...
[Lc(2)滑动窗口_1] 长度最小的数组 | 无重复字符的最长子串 | 最大连续1的个数 III | 将 x 减到 0 的最小操作数
目录 1. 长度最小的字数组 题解 代码 ⭕2.无重复字符的最长子串 题解 代码 3.最大连续1的个数 III 题解 代码 4.将 x 减到 0 的最小操作数 题解 代码 1. 长度最小的字数组 题目链接:209.长度最小的字数组 题目分析: 给定一个含有 n 个 正整数 的数组…...
迷你世界脚本玩家接口:Player
玩家接口:Player 彼得兔 更新时间: 2024-07-28 17:49:05 继承自 Actor 具体函数名及描述如下: 序号 函数名 函数描述 1 getAttr(...) 玩家属性获取 2 setAttr(...) 玩家属性设置 3 getHostUin(...) 获取房主uin 4 isMainPlayer(...) …...
三、0-1搭建springboot+vue3前后端分离-springboot整合mybatis plus 之本地安装mysql
一、安装mysql: 官网下载:https://dev.mysql.com/downloads/mysql/?spm5176.28103460.0.0.40f75d27Stx4Xj 网盘分享:http://链接: https://pan.baidu.com/s/1mS_-VxrKAeRL3utBvD64gg?pwd6666 提取码: 6666 复制这段内容后打开百度网盘手机…...
市场趋势解析与交易策略优化
市场趋势解析与交易策略优化 在市场环境不断变化的情况下,理解市场趋势并优化交易策略是交易者稳健发展的关键。通过科学的方法识别市场动向,结合数据分析优化交易方案,可以提高交易效率并降低风险。本文将探讨趋势分析的要点,并介…...
Spring Boot 常用注解全解析:从核心到进阶的实践指南
目录 引言:为什么注解是Spring Boot开发者的“战略武器”? 一、核心启动注解 1.1 应用启动三剑客 二、Web开发注解 2.1 控制器层注解 三、依赖注入注解 3.1 依赖管理矩阵 四、数据访问注解 4.1 JPA核心注解 五、配置管理注解 5.1 配置绑定注解…...
如何优化FFmpeg拉流性能及避坑指南
FFmpeg作为流媒体处理的核心工具,其拉流性能直接影响直播/点播体验。本文从协议优化、硬件加速、网络策略三大维度切入,结合实战案例与高频踩坑点,助你突破性能瓶颈! 一、性能优化进阶:从协议到硬件的全链路调优 协议选…...
基础dp——动态规划
目录 一、什么是动态规划? 二、动态规划的使用步骤 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 三、试题讲解 1.最小花费爬楼梯 2.下降路径最小和 3.解码方法 一、什么是动态规划? 动态规划(Dynamic Programming&…...
RAG实战指南:让大模型学会检索外部知识
RAG:给 LLM 装上知识库——从原理到完整可运行系统LLM 的知识截止在训练日期。RAG 让 AI 能「查资料」回答——这是 Agent 有「长期记忆」的基础。一、为什么需要 RAG 用户:HarmonyOS NEXT 的 Observed 装饰器怎么用?没有 RAG 的 LLM…...
快速开发AI应用原型时Taotoken分钟级接入的价值
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 快速开发AI应用原型时Taotoken分钟级接入的价值 在黑客松、内部创新日或产品早期原型开发阶段,时间是最宝贵的资源。开…...
Gerbv:你的免费PCB设计“翻译官“,让Gerber文件开口说话
Gerbv:你的免费PCB设计"翻译官",让Gerber文件开口说话 【免费下载链接】gerbv Maintained fork of gerbv, carrying mostly bugfixes 项目地址: https://gitcode.com/gh_mirrors/ge/gerbv 想象一下,当你拿到一份PCB设计文件…...
猫抓Cat-Catch终极指南:3分钟掌握浏览器资源嗅探完整方案
猫抓Cat-Catch终极指南:3分钟掌握浏览器资源嗅探完整方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到这样的困扰&am…...
AI智能体集群如何革新代码审查:架构、实现与CI/CD集成
1. 项目概述:一个为代码审查提效的智能体集群如果你是一名团队的技术负责人或资深开发者,肯定对代码审查(Code Review)这个环节又爱又恨。爱的是,它是保证代码质量、促进知识共享的关键闸门;恨的是…...
学一下PLC2--软件PLC(TODO)
既然你手头有 Raspberry Pi Pico,你甚至不需要买任何新的 PLC 硬件,可以直接把它变成一个标准的工业 PLC! 实现原理: OpenPLC 是一个开源的符合 IEC 61131-3 国际标准的 PLC 软件系统。 它完美支持 Raspberry Pi Pico (RP2040)。…...
从零开始将个人小项目的大模型API切换至Taotoken的过程与感受
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从零开始将个人小项目的大模型API切换至Taotoken的过程与感受 1. 迁移前的项目状态与动机 我维护着一个用于内容摘要和分类的个人…...
Translumo:Windows平台实时屏幕翻译神器,打破语言障碍的终极解决方案
Translumo:Windows平台实时屏幕翻译神器,打破语言障碍的终极解决方案 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/…...
零代码构建离线环境数据记录器:基于WipperSnapper与BME280的实践指南
1. 项目概述:告别代码,用离线数据记录器抓住每一刻环境数据如果你曾经想搭建一个能默默在角落记录温度、湿度或气压的小设备,但又觉得写代码、调试硬件太麻烦,那今天这个项目就是为你准备的。数据记录,听起来很专业&am…...
BG3ModManager:博德之门3模组管理终极解决方案
BG3ModManager:博德之门3模组管理终极解决方案 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 你是否曾经为《博德之门3》的模组管理而烦…...
