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

[数字图像处理]直方图规定化

这里分别使用基于像素手动计算调用工具箱函数两种方法实现直方图规定化

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为通过手动计算调整原始图像的像素值分布,使其尽可能接近期望图像的像素值分布,从而实现图像的直方图规定化的结果。原始图像的直方图可能比较集中,显示较低的对比度和动态范围。而期望图像的直方图覆盖了更广泛的像素值范围,有更高的对比度和动态范围。规定化后的图像直方图与期望图像的直方图更加相似,可以看到原始图像人物脸部区域较亮,对比度较高,而期望图像整体较暗,对比度较低,通过规定化处理后,图像对比度降低,可以明显发现人物脸部区域变暗。

图1

图2为调用工具包函数实现的直方图规定化结果。通过使用工具包中的函数调整图片的对比度和亮度。自定义期望直方图(hgram=50:2:250)使调整的图像像素均匀分布在50-250之间,经过规定化处理,可以发现规定化后的图像对比度和亮度增强。

 

图2

相关文章:

[数字图像处理]直方图规定化

这里分别使用基于像素手动计算、调用工具箱函数两种方法实现直方图规定化 1.基于像素进行直方图规定化 &#xff08;1&#xff09;读取了原始图像和期望图像&#xff0c;并将它们转换为灰度图像 &#xff08;2&#xff09;计算原始图像和期望图像的像素概率分布直方图P(i)和…...

OpenMCU(一):STM32F407 FreeRTOS移植

概述 本文主要描述了STM32F407移植FreeRTOS的简要步骤。移植描述过程中&#xff0c;忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_FreeRTOS这个工程&#xff0c;该工程已经下载放好了移植stm32f407 FreeRTOS的所有文件 OpenMCU_FreeRTOS工…...

Redis - 高可用实现方案解析:主从复制与哨兵监控

文章目录 Pre概述Redis 高可用实现方案一、主从复制机制1.1 全量同步流程1.2 增量同步&#xff08;PSYNC&#xff09;流程 二、哨兵监控机制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&#xff08;Elasticsearch, Logstash, Kibana&#xff09;的200个基础问题及其答案&#xff0c;涵盖了ELK的核心概念、组件、配置、使用场景、优化等方面。 ​Elasticsearch 基础 ​**什么是Elasticsearch&#xff1f;**​ 答&#xff1a;Elasticsearch是一个分…...

结合PyMuPDF+pdfplumber,删除PDF指定文本后面的内容

🚀 一、需求场景解析 在日常办公中,我们经常会遇到这样的痛点: 合同处理:收到上百份PDF合同,需要找到"签署页"之后的内容并删除报表加工:批量移除财务报表中的敏感数据区域文档归档:快速提取技术文档的关键章节传统的手动操作方式存在三大致命缺陷: ❗ 耗时…...

张驰咨询:用六西格玛重构动力电池行业的BOM成本逻辑

在动力电池行业&#xff0c;BOM&#xff08;物料清单&#xff09;成本每降低1%&#xff0c;都可能改写企业的利润曲线。某头部企业的三元锂电池BOM成本曾较行业标杆高出11%&#xff0c;单电芯利润率被压缩至3%的生死线。然而&#xff0c;通过张驰咨询的六西格玛方法论&#xff…...

【深度学习CV】【图像分类】从CNN(卷积神经网络)、ResNet迁移学习到GPU高效训练优化【案例代码】详解

摘要 本文分类使用的是resNet34,什么不用yolo v8&#xff0c;yolo v10系列,虽然他们也可以分类&#xff0c;因为yolo系列模型不纯粹&#xff0c;里面包含了目标检测的架构&#xff0c;所以分类使用的是resNet 本文详细介绍了三种不同的方法来训练卷积神经网络进行 CIFAR-10 图…...

《基于HarmonyOS NEXT API 12+,搭建新闻创作智能写作引擎》

在信息爆炸的时代&#xff0c;新闻行业对于内容生产的效率和质量有着极高的要求。AI技术的发展为新闻创作带来了新的变革契机&#xff0c;借助AI智能写作助手&#xff0c;新闻工作者可以快速生成新闻稿件的初稿&#xff0c;大大提高创作效率。本文将基于HarmonyOS NEXT API 12及…...

python代码注释方式

在 Python 中&#xff0c;注释是用于解释代码、提高代码可读性和可维护性的重要工具。Python 支持两种主要的注释方式&#xff1a;单行注释和多行注释。此外&#xff0c;Python 还支持文档字符串&#xff08;docstrings&#xff09;&#xff0c;用于为模块、函数、类和方法提供…...

小哆啦解题记:螺旋矩阵

小哆啦开始刷力扣的第二十八天 54. 螺旋矩阵 - 力扣&#xff08;LeetCode&#xff09; &#x1f32a;️ 一场螺旋风暴的较量 在一个阳光明媚的午后&#xff0c;小哆啦悠闲地坐在窗边啃着曲奇&#xff0c;突然&#xff0c;一道神秘的光芒闪过&#xff0c;小智从代码的虚空中出现…...

【C#】委托是什么

在 C# 中&#xff0c;委托&#xff08;Delegate&#xff09; 是一种类型安全的函数指针&#xff0c;可以将方法作为参数传递或者保存方法的引用。下面详细介绍一下委托的相关概念和用法&#xff1a; 1. 基本概念 类型安全&#xff1a;委托在声明时会指定方法的返回类型和参数…...

[Lc(2)滑动窗口_1] 长度最小的数组 | 无重复字符的最长子串 | 最大连续1的个数 III | 将 x 减到 0 的最小操作数

目录 1. 长度最小的字数组 题解 代码 ⭕2.无重复字符的最长子串 题解 代码 3.最大连续1的个数 III 题解 代码 4.将 x 减到 0 的最小操作数 题解 代码 1. 长度最小的字数组 题目链接&#xff1a;209.长度最小的字数组 题目分析: 给定一个含有 n 个 正整数 的数组…...

迷你世界脚本玩家接口:Player

玩家接口&#xff1a;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&#xff1a; 官网下载&#xff1a;https://dev.mysql.com/downloads/mysql/?spm5176.28103460.0.0.40f75d27Stx4Xj 网盘分享&#xff1a;http://链接: https://pan.baidu.com/s/1mS_-VxrKAeRL3utBvD64gg?pwd6666 提取码: 6666 复制这段内容后打开百度网盘手机…...

市场趋势解析与交易策略优化

市场趋势解析与交易策略优化 在市场环境不断变化的情况下&#xff0c;理解市场趋势并优化交易策略是交易者稳健发展的关键。通过科学的方法识别市场动向&#xff0c;结合数据分析优化交易方案&#xff0c;可以提高交易效率并降低风险。本文将探讨趋势分析的要点&#xff0c;并介…...

Spring Boot 常用注解全解析:从核心到进阶的实践指南

目录 引言&#xff1a;为什么注解是Spring Boot开发者的“战略武器”&#xff1f; 一、核心启动注解 1.1 应用启动三剑客 二、Web开发注解 2.1 控制器层注解 三、依赖注入注解 3.1 依赖管理矩阵 四、数据访问注解 4.1 JPA核心注解 五、配置管理注解 5.1 配置绑定注解…...

如何优化FFmpeg拉流性能及避坑指南

FFmpeg作为流媒体处理的核心工具&#xff0c;其拉流性能直接影响直播/点播体验。本文从协议优化、硬件加速、网络策略三大维度切入&#xff0c;结合实战案例与高频踩坑点&#xff0c;助你突破性能瓶颈&#xff01; 一、性能优化进阶&#xff1a;从协议到硬件的全链路调优 协议选…...

基础dp——动态规划

目录 一、什么是动态规划&#xff1f; 二、动态规划的使用步骤 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 三、试题讲解 1.最小花费爬楼梯 2.下降路径最小和 3.解码方法 一、什么是动态规划&#xff1f; 动态规划&#xff08;Dynamic Programming&…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...