图像直方图均衡化

1. 直方图均衡化介绍

自我感觉书上讲的很清楚,直接把截图贴上了。

在进行直方图均值化的过程如下

读入图像
对每个通道分别统计像素值[0,255]出现的次数。
对每个通道分别求像素值[0,255]出现的概率,得到概率直方图。
对每个通道分别求像素值[0,255]概率的前缀和,得到累计直方图。
对每个通道根据累计直方图分别求像素映射函数。
对每个通道完成每个像素点的映射。
输出直方图均衡化的图像。
2.代码(MATLAB)

 1 %直方图均衡化
 2 I = imread(‘D:/picture/girl.jpg‘);
 3 I=rgb2gray(I);%如果某些图片不是二维灰度图像要加上这句,否则imhist报错
 4 [height,width] = size(I);
 5 figure
 6 subplot (221)
 7 imshow(I);%显示原始图像
 8 subplot(222)
 9 imhist(I)%显示原始图像直方图(注释一)
10
11 %进行像素灰度统计
12 NumPixel = zeros(1,256);%统计各灰度数目,共256个灰度级
13 for i = 1:height
14     for j = 1:width
15         NumPixel (I(i,j)+1)=NumPixel(I(i,j)+1)+1;%对应灰度值像素点数量增加一9(注释二)
16     end
17 end
18 %计算灰度分布密度
19 ProbPixel = zeros(1,256);
20 for i =1:256
21     ProbPixel(i) = NumPixel(i)/(height*width*1.0);%该灰度值的像素个数除于总的像素点的个数
22 end
23 %计算累计直方图分布
24 CumuPixel = zeros(1,256);
25 for i = 1:256;
26     if i == 1
27         CumuPixel(i) = ProbPixel(i);
28     else
29         CumuPixel(i) = CumuPixel(i-1)+ProbPixel(i);%进行累加
30     end
31 end
32 %累计分布取整
33
34 CumuPixel = uint8(256* CumuPixel);%也就是原来图像的灰度级根据累加概率的值变成了新的灰度级(注释三)
35 %对灰度值进行映射(均衡化)
36 for k =1:height
37     for l =1:width
38         I(k,l)= CumuPixel(I(k,l)+1);%映射,加一的目的是使下标从一开始
39     end
40 end
41 subplot(223)
42 imshow(I)%显示原始图像
43 subplot(224)
44 imhist(I)%显示原始图像直方图

运行结果如下

注:直方图x轴是图像的灰度值,y轴是在该灰度值的像素的个数

分析:观察图片我们发现对于原始图片整体颜色偏白,对比度不强,直方图分布偏于右边。直方化后的图片整体颜色加深,灰度增强,头发没有原来那么偏白了,直方图整体分布开始偏左且更均匀化,图片整体对比度增强。

3注释

注释一

imhist()主要用于计算图像灰度值的直方图统计;

第一次使用时出现的错误:

Error using ==> iptcheckinput Function IMHIST expected its first input, I or X, to be two-dimensional.

输入的图像必须是二维的图像,当输入的图像是三维的时候,可现转换,转换代码:

I=imread(‘nameofupicture.tif‘);

I=rgb2gray(I);

imhist(I);

imhist()的应用:

具体用法:

imhist( i );直接显示图像i的灰度直方图;

imhist(i,n)n为指定灰度级显示直方图; 

[count, x] = imhist( i ) 获取直方图信息,count为每一级灰度像素个数,x为灰度级,x也可以在imhist(i,x)中指定,可以通过stem(x,count)画相应直方图; 

如代码

 1 i = imread(‘D:/picture/ZiXia.jpg‘);
 2 i=rgb2gray(i);
 3 imshow(i);
 4 figure;
 5 imhist(i);
 6 figure;
 7 imhist(i,32);
 8 figure;
 9 [count,x] = imhist(i,32);
10 stem(x,count);

注释二

 NumPixel(I(i,j) + 1) --------这个表示的是什么呢?---a NumPixel(I(i,j) + 1) + 1------这个表示像素点的灰度级加1---b I(i,j)-----表示(i,j)点的灰度值 a 处灰度值加1是代码中灰度值得范围的[1,256],不是[0,255] b 处为对灰度值相同的像素做统计加1,可以将NumPixel( I(i,j) + 1)看做是下标为灰度值,数组元素值为对应下标(灰度值)统计像素的个数 比如统计出来的灰度值为23的像素个数为4个,那么代码中的表现形式是:NumPixel( 22 + 1) = 4.

注释三

比如原始图像的灰度值为30的像素个数在新图像里面就变为原始图像灰度值小于等于30的像素个数之和作为新图像像素值为30的像素个数。依次类推。

原文地址:https://www.cnblogs.com/henuliulei/p/10601122.html

时间: 2024-10-08 16:33:09

图像直方图均衡化的相关文章

图像直方图均衡化增强opencv与C语言版

本文实现彩色图像的全局直方图均衡.分别对R/G/B三通道均衡,读写图片采用OpenCV.代码如下: #include <opencv2/opencv.hpp> //#include <cv.h> //#include <cxcore.h> //#include <highgui.h> #include <time.h> #include <stdio.h> #include <math.h> #include "

图像直方图均衡化(C#)

关于图像直方图均衡化的原理和步骤先不作讨论,我就看看代码吧. private Bitmap picequalization(Bitmap basemap, int width, int height) { Bitmap retmap = new Bitmap(basemap, width, height); int size = width * height; int[] gray = new int[256]; double[] graydense = new double[256]; for

Python实现图像直方图均衡化算法

title: "Python实现图像直方图均衡化算法" date: 2018-06-12T17:10:48+08:00 tags: [""] categories: ["python"] 效果图 代码 #!/usr/bin/env python3 # coding=utf-8 import matplotlib.image as mpimg from matplotlib import pyplot as plt import sys impor

opencv图像直方图均衡化及其原理

直方图均衡化是什么有什么用 先说什么是直方图均衡化,通俗的说,以灰度图为例,原图的某一个像素为x,经过某个函数变为y.形成新的图.新的图的灰度值的分布是均匀的,这个过程就叫直方图均衡化. 图像直方图均衡化作用:用来增强对比度. 这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候.通过这种方法,亮度可以更好地在直方图上分布.这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能. 这种方法对于背景和前景都太亮或者太

opencv:图像直方图均衡化

// 直方图均衡化 Mat gray, dst; cvtColor(src, gray, COLOR_BGR2GRAY); equalizeHist(gray, dst); imshow("gray", gray); imshow("equalizeHist", dst); 原文地址:https://www.cnblogs.com/wbyixx/p/12246837.html

图像直方图与直方图均衡化

图像直方图与直方图均衡化 图像直方图以及灰度与彩色图像的直方图均衡化 图像直方图: 概述: 图像的直方图用来表征该图像像素值的分布情况.用一定数目的小区间(bin)来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目. 图像直方图图形化显示不同的像素值在不同的强度值上的出现频率,对于灰度图像来说强度范围为[0~255]之间,对于RGB的彩色图像可以独立显示三种颜色的图像直方图. 同时直方图是用来寻找灰度图像二值化阈值常用而且是有效的手段之一,如果一幅灰度图像的直方图显示为两个波

《OpenCV:直方图应用:直方图均衡化,直方图匹配,对比直方图》

直方图均衡化 直方图均衡化(Histogram Equalization)是直方图最典型的应用,是图像点运算的一种.对于一幅输入图像,通过运算产生一幅输出图像,点运算是指输出图像的每个像素点的灰度值由输入像素点决定,即: 直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数过程.从分布图上的理解就是希望原始图像中y轴的值在新的分布中尽可能的展开.变换过程是利用累积分布函数对原始分布进行映射,生成新的均匀拉伸的分布.因此对应每个点的操作是寻找原始分布

python实现直方图均衡化,理想高通滤波与高斯低通滤波

写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验二,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验二. 由于时间紧张,代码没有进行任何优化,实验算法仅供参考. 实验要求 实现图像直方图均衡化,要求显示均衡化前.后直方图以及均衡化后图像. 对单通道图像进行DFT变换,要求显示幅度图和相位图,并设计理想高通滤波器和高斯低通滤波器对图像进行频域滤波,并显示滤波之后的图像. 注:除DFT和IDFT外,不允许调库 实验代码 代码首先贴在这里,仅供

图像锐化与直方图均衡化

图像锐化和直方图均衡化虽然效果上都是增强对比度的,都是图像增强,但是还是有一些区别的. 图像锐化 图像锐化是突出图像的边缘(高频部分),增强边界像素的对比度,使边缘处像素黑的更黑,白的跟白 因此简单的锐化就是      原图像 + 边缘图像*系数 锐化的模板的所有系数相加要等于1 比如可以使用模板 或者 其中可以简单的看成是8领域的拉普拉斯算子的边缘图+原图,因为中心系数加1表示加上了原图的像素值.所以该模板就等于原图像 + 边缘图像*1 直方图均衡化 在我的博客http://blog.csdn