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

【python】直方图正则化详解和示例

直方图正则化(Histogram Normalization)是一种图像增强技术,目的是改变图像的直方图以改善图像的质量。具体来说,它通过将图像的直方图调整为指定的形状,以增强图像的对比度和亮度。

直方图正则化的基本步骤如下:

计算输入图像的直方图和累积分布函数(CDF)。
计算正则化的直方图,使其具有相同的CDF。
使用正则化的直方图来映射输入图像的像素值。
下面是一个使用Python和OpenCV库实现直方图正则化的示例代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt# 加载图像
image = cv2.imread('11111.jpg', cv2.IMREAD_GRAYSCALE)# 计算输入图像的直方图和累积分布函数(CDF)
hist, bins = np.histogram(image.flatten(), 256, [0, 256])
cdf = hist.cumsum()
cdf_normalized = cdf * hist.max() / cdf.max()# 计算正则化的直方图
cdf_m = np.ma.masked_equal(cdf, 0)
cdf_m = (cdf_m - cdf_m.min()) * 255 / (cdf_m.max() - cdf_m.min())
cdf_final = (cdf_m - cdf_m.min()) * hist.max() / (cdf_m.max() - cdf_m.min())# 使用正则化的直方图来映射输入图像的像素值
image_normalized = np.interp(image.flatten(), bins[:-1], cdf_final)
image_normalized = image_normalized.reshape(image.shape)# 显示原始图像、正则化后的图像和直方图
plt.subplot(2, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.xticks([]), plt.yticks([])plt.subplot(2, 2, 2)
plt.hist(image.flatten(), 256, [0, 256])
plt.title('Original Histogram')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')plt.subplot(2, 2, 3)
plt.imshow(image_normalized, cmap='gray')
plt.title('Normalized Image')
plt.xticks([]), plt.yticks([])plt.subplot(2, 2, 4)
plt.hist(image_normalized.flatten(), 256, [0, 256])
plt.title('Normalized Histogram')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')#plt.show()
plt.savefig("11111gray.jpg")

这段代码首先加载一张灰度图像,并计算其直方图和CDF。然后,它计算正则化的直方图,并使用该直方图来映射输入图像的像素值。最后,它显示原始图像、正则化后的图像和两个直方图。
效果图如下所示:
在这里插入图片描述

http://www.lryc.cn/news/237396.html

相关文章:

  • c语言:矩阵交换
  • 【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(一)
  • 暖阳脚本_ 将Agent技术的灵活性引入RPA,清华等发布自动化智能体ProAgent
  • JUnit 单元自动化
  • Vue3 源码解读系列(十一)——插槽 slot
  • [github初学者教程] 分支管理-以及问题解决
  • 见面礼——图论
  • 【论文阅读】SPARK:针对视觉跟踪的空间感知在线增量攻击
  • MR混合现实教学系统在汽车检修与维护课堂教学中的应用
  • CentOS7安装xvfb,解决服务器没有X-Server的问题
  • 快速集成Skywalking 9(Windows系统、JavaAgent、Logback)
  • 起立科技(起鸿)在第25届高交会上展示透明OLED技术创新
  • 大模型LLM 在线量化;GPTQ\AWQ量化
  • 记一次线上bug排查-----SpringCloud Gateway组件 请求头accept-encoding导致响应结果乱码
  • 复杂数据统计与R语言程序设计实验一
  • UEFI实战——键盘操作
  • 苹果CMS首涂第30套可装修DIY主题模板免授权版
  • C#每天复习一个重要小知识day2:有参与无参构造函数
  • 大语言模型的三阶段训练
  • 面试题c/c++ --STL 算法与数据结构
  • 云原生微服务-理论篇
  • Unity模拟薄膜干涉效果
  • AIGC ChatGPT4对Gbase数据库进行总结
  • OSI网络模型与TCP/IP协议
  • C语言的5个内存段你了解吗?( 代码段/数据段/栈/堆)
  • 智能合约检测:新一代区块链技术的安全守护
  • Flutter笔记:缩放手势
  • JAXB:用XmlElement注解复杂类型的Java属性,来产生多层嵌套的xml元素
  • 万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志分层
  • 工作记录---为什么双11当天不能申请退款?(有趣~)