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

直方图均衡化及Matlab实现

文章目录

      • 直方图均衡化
        • 关键点及思路
        • Matlab实现

直方图均衡化

直方图均衡化是一种图像增强技术,主要用于增强图像的对比度,特别是当图像的有用数据的对比度接近时效果显著。通过改变图像的直方图分布,直方图均衡化能够使图像的灰度值更加接近均匀分布,从而增加图像的整体对比度。‌

关键点及思路

直方图均衡化有两个关键点:

  • 像素的强度顺序不变,也就是说经过一个灰度映射函数后,原本低强度值的像素依然比原本高强度值的像素强度低,即单调递增
  • 变换后像素的直方图是接近均匀的,即每个等间隔灰度范围的像素个数基本相等。

这里不列举公式了(看也看不懂…),基于这两个关键点,直方图均衡化的思路其实很简单,就是基于原图像素灰度的累计概率分布(CDF)与变换后图像的累计概率分布((CDF))保持一致,只是变换后的图像灰度范围是0-255,一般要比原图的灰度范围广。这样就达到了把原图的一小部分的灰度范围以一种近似均匀的方式扩散到整个0-255灰度范围。

Matlab实现
clc;clear;close all;

%%调用自定义函数进行直方图均衡化
imageName = 'lena.png';
img = imread(imageName);
histeq_img = hisuni(img);
subplot(1,2,1);
imshow(img);
title('原图');
subplot(1,2,2);
imshow(histeq_img);
title('直方图均衡化图像');

%%绘制直方图
subplot(1,2,1);
imhist(img);
title('原图直方图');
subplot(1,2,2);
imhist(histeq_img);
title('均衡化直方图');

function new_image = hisuni(image)
    % 直方图均衡化函数
    % 输入: image - 输入的灰度图像
    % 输出: new_image - 均衡化后的图像
    
    [m, n] = size(image);

    % 计算直方图
    [Counts, ~] = histcounts(image(:), 0:256)
    
    % 计算概率密度函数 (PDF)
    pdf = Counts/(m*n)
    
    % 计算累积分布函数 (CDF)
    cdf = cumsum(pdf)
    
    % 生成映射表
    mapping = uint8(cdf * 255)
    
    % 初始化新图像
    new_image = zeros(size(image), 'uint8');
    
    % 对每个像素值进行映射
    for idx = 1:255
        new_image(image == idx - 1) = mapping(idx);
    end
end

当然matlab中也有内置函数histeq函数,直接对原图矩阵调用即可进行均衡化增强。

image-20241111214106986

image-20241111214600605


http://www.kler.cn/a/391987.html

相关文章:

  • INQUIRE:一个包含五百万张自然世界图像,涵盖10,000个不同物种的专为专家级文本到图像检索任务设计的新型基准数据集。
  • WPF学习之路,控件的只读、是否可以、是否可见属性控制
  • flink sql + kafka + mysql 如何构建实时数仓
  • Linux kernel 堆溢出利用方法(二)
  • SAP_MM_SD_PP_FICO_视频课程几乎免费送
  • C++初阶——list
  • 解决表格出现滚动条样式错乱问题
  • AI电商的创新应用
  • Kafka-Controller选举
  • Error creating bean with name ‘reactiveElasticsearchClient
  • 力扣 LeetCode 206. 反转链表(Day2:链表)
  • NFTScan | 11.04~11.10 NFT 市场热点汇总
  • git 打标签发布新版
  • Android 老项目适配 Compose 混合开发
  • leetcode-15-三数之和
  • 商品,订单业务流程梳理一
  • Star-CCM+应用篇之动力电池温度场仿真操作流程与方法
  • PostgreSQL 多个库批量执行脚本
  • 【JavaScript】LeetCode:86-90
  • 基于ZYNQ7035的PS-linux实现FTP服务器移植
  • 彻底解决单片机BootLoader升级程序失败问题
  • 【Qt-ROS开发】使用 Qt Creator 构建和编译含 ROS 库的 Qt 项目
  • 选择IP-guard还是Ping32?了解两款数据防泄漏软件的优势和应用
  • 矩阵函数及计算
  • 《Javascript 网页设计案例分享》
  • LeetCode【0006】Z字形变换