精华内容
下载资源
问答
  • 归一化灰度直方图 Matlab

    万次阅读 2016-08-04 21:30:55
    图像直方图描述的是图像各个灰度级的统计特性,他表示图像每一灰度级与该灰度级...那么Ng--g构成灰度直方图,Pg--g构成归一化灰度直方图。  用matlab实现,imhist(I),imhist(I,n)表示将灰度级均匀分成n个小区间,[co

        图像直方图描述的是图像各个灰度级的统计特性,他表示图像每一灰度级与该灰度级出现频率的对应关系,因为灰度级不是连续的,自然,灰度直方图是一个离散函数。横坐标是灰度级g,纵坐标是Ng,如果总的像素是N,灰度级为L,Pg=Ng/N。那么Ng--g构成灰度直方图,Pg--g构成归一化灰度直方图。

        用matlab实现,imhist(I),imhist(I,n)表示将灰度级均匀分成n个小区间,[counts,x]=imhist(...)返回每个灰度区间的像素数目和对应的灰度小区间的向量。用stem(x,counts)可以画出灰度直方图。

    I=imread('pout.tif');
    L=rgb2gray(I);%%转化成我们熟悉的二值图像,也就是二值灰度图像。
    [M,N]=size(L);
    [counts,x]=imhist(L,32);
    counts=counts/M/N;
    stem(x,counts);

    效果:


        

    展开全文
  • 本文主要介绍了灰度直方图相关的处理,包括以下几个方面的内容:利用OpenCV计算图像的灰度直方图,并绘制直方图曲线直方图均衡的原理及实现直方图规定(匹配)的原理及实现图像的灰度直方图一幅图像由不同灰度值的...

    本文主要介绍了灰度直方图相关的处理,包括以下几个方面的内容:

    • 利用OpenCV计算图像的灰度直方图,并绘制直方图曲线
    • 直方图均衡化的原理及实现
    • 直方图规定化(匹配)的原理及实现

    图像的灰度直方图

    一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征。图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少。

    图像的灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其中,横坐标是灰度级,纵坐标是该灰度级出现的频率。

    c0a810b4f22af6aad1f85575273399ae.png

    不过通常会将纵坐标归一化到[0,1]区间内,也就是将灰度级出现的频率(像素个数)除以图像中像素的总数。灰度直方图的计算公式如下:

    911e6b9a0f0d6845fb8717bdfbc90d98.png

    其中,rk是像素的灰度级,nk是具有灰度rk的像素的个数,MN是图像中总的像素个数。

    OpenCV灰度直方图的计算

    直方图的计算是很简单的,无非是遍历图像的像素,统计每个灰度级的个数。在OpenCV中封装了直方图的计算函数calcHist,为了更为通用该函数的参数有些复杂,其声明如下:

    void calcHist( const Mat* images, int nimages,                          const int* channels, InputArray mask,                          OutputArray hist, int dims, const int* histSize,                          const float** ranges, bool uniform = true, bool accumulate = false );

    该函数能够同时计算多个图像,多个通道,不同灰度范围的灰度直方图. 其参数如下

    • images,输入图像的数组,这些图像要有相同大大小,相同的深度(CV_8U CV_16U CV_32F).
    • nimages ,输入图像的个数
    • mask,可选的掩码,不使用时可设为空。要和输入图像具有相同的大小,在进行直方图计算的时候,只会统计该掩码不为0的对应像素
    • hist,输出的直方图
    • dims,直方图的维度
    • histSize,直方图每个维度的大小
    • ranges,直方图每个维度要统计的灰度级的范围
    • uniform,是否进行归一化,默认为true
    • accumulate,累积标志,默认值为false。

    为了计算的灵活性和通用性,OpenCV的灰度直方图提供了较多的参数,但对于只是简单的计算一幅灰度图的直方图的话,又显得较为累赘。这里对calcHist进行一次封装,能够方便的得到一幅灰度图直方图。

    class Histogram1D{private:    int histSize[1]; // 项的数量    float hranges[2]; // 统计像素的最大值和最小值    const float* ranges[1];    int channels[1]; // 仅计算一个通道public:    Histogram1D()    {        // 准备1D直方图的参数        histSize[0] = 256;        hranges[0] = 0.0f;        hranges[1] = 255.0f;        ranges[0] = hranges;        channels[0] = 0;    }    MatND getHistogram(const Mat &image)    {        MatND hist;        // 计算直方图        calcHist(&image ,// 要计算图像的            1,                // 只计算一幅图像的直方图            channels,        // 通道数量            Mat(),            // 不使用掩码            hist,            // 存放直方图            1,                // 1D直方图            histSize,        // 统计的灰度的个数            ranges);        // 灰度值的范围        return hist;    }    Mat getHistogramImage(const Mat &image)    {        MatND hist = getHistogram(image);        // 最大值,最小值        double maxVal = 0.0f;        double minVal = 0.0f;        minMaxLoc(hist, &minVal, &maxVal);        //显示直方图的图像        Mat histImg(histSize[0], histSize[0], CV_8U, Scalar(255));        // 设置最高点为nbins的90%        int hpt = static_cast(0.9 * histSize[0]);        //每个条目绘制一条垂直线        for (int h = 0; h < histSize[0]; h++)        {            float binVal = hist.at(h);            int intensity = static_cast(binVal * hpt / maxVal);            // 两点之间绘制一条直线            line(histImg, Point(h, histSize[0]), Point(h, histSize[0] - intensity), Scalar::all(0));        }        return histImg;    }};

    Histogram1D提供了两个方法:getHistogram返回统计直方图的数组,默认计算的灰度范围是[0,255];getHistogramImage将图像的直方图以线条的形式画出来,并返回包含直方图的图像。测试代码如下:

        Histogram1D hist;    Mat histImg;    histImg = hist.getHistogramImage(image);    imshow("Image", image);    imshow("Histogram", histImg);
    548857f68db74f6042f0b00554b1efec.png

    直方图均衡化 Histogram Equalization

    假如图像的灰度分布不均匀,其灰度分布集中在较窄的范围内,使图像的细节不够清晰,对比度较低。通常采用直方图均衡化及直方图规定化两种变换,使图像的灰度范围拉开或使灰度均匀分布,从而增大反差,使图像细节清晰,以达到增强的目的。

    直方图均衡化,对图像进行非线性拉伸,重新分配图像的灰度值,使一定范围内图像的灰度值大致相等。这样,原来直方图中间的峰值部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较为平坦的直方图。

    均衡化算法

    直方图的均衡化实际也是一种灰度的变换过程,将当前的灰度分布通过一个变换函数,变换为范围更宽、灰度分布更均匀的图像。也就是将原图像的直方图修改为在整个灰度区间内大致均匀分布,因此扩大了图像的动态范围,增强图像的对比度。通常均衡化选择的变换函数是灰度的累积概率,直方图均衡化算法的步骤:

    • 计算原图像的灰度直方图
    8ff435a71c4b1954a882619b5643ed11.png

    ,其中n为像素总数,Nk为灰度级Sk的像素个数

    • 计算原始图像的累积直方图
    33083502190b73543080e9d49947ef14.png
    8b8ca39f2c4f1528e13f40880f7e5ba4.png

    其中Dj为目的图像的像素,

    692033985e0e7fb2f6b8f6638ec3eb0d.png

    是源图像灰度为i的累积分布,L是图像中最大灰度级(灰度图为255)

    其代码实现如下:

    • 在上面中封装了求灰度直方图的类,这里直接应用该方法得到图像的灰度直方图;
    • 将灰度直方图进行归一化,计算灰度的累积概率;
    • 创建灰度变化的查找表
    • 应用查找表,将原图像变换为灰度均衡的图像

    具体代码如下:

    void equalization_self(const Mat &src, Mat &dst){    Histogram1D hist1D;    MatND hist = hist1D.getHistogram(src);    hist /= (src.rows * src.cols); // 对得到的灰度直方图进行归一化    float cdf[256] = { 0 }; // 灰度的累积概率    Mat lut(1, 256, CV_8U); // 灰度变换的查找表    for (int i = 0; i < 256; i++)    {        // 计算灰度级的累积概率        if (i == 0)            cdf[i] = hist.at(i);        else            cdf[i] = cdf[i - 1] + hist.at(i);        lut.at(i) = static_cast(255 * cdf[i]); // 创建灰度的查找表    }    LUT(src, lut, dst); // 应用查找表,进行灰度变化,得到均衡化后的图像}

    上面代码只是加深下对均衡化算法流程的理解,实际在OpenCV中也提供了灰度均衡化的函数equalizeHist,该函数的使用很简单,只有两个参数:输入图像,输出图像。下图为,上述代码计算得到的均衡化结果和调用equalizeHist的结果对比

    a54546971e97abc795f10d2c760902b6.png

    最左边为原图像,中间为OpenCV封装函数的结果,右边为上面代码得到的结果。

    直方图规定化

    从上面可以看出,直方图的均衡化自动的确定了变换函数,可以很方便的得到变换后的图像,但是在有些应用中这种自动的增强并不是最好的方法。有时候,需要图像具有某一特定的直方图形状(也就是灰度分布),而不是均匀分布的直方图,这时候可以使用直方图规定化。

    直方图规定化,也叫做直方图匹配,用于将图像变换为某一特定的灰度分布,也就是其目的的灰度直方图是已知的。这其实和均衡化很类似,均衡化后的灰度直方图也是已知的,是一个均匀分布的直方图;而规定化后的直方图可以随意的指定,也就是在执行规定化操作时,首先要知道变换后的灰度直方图,这样才能确定变换函数。规定化操作能够有目的的增强某个灰度区间,相比于,均衡化操作,规定化多了一个输入,但是其变换后的结果也更灵活。

    • 将原始图像的灰度直方图进行均衡化,得到一个变换函数

    s = T(r)

    其中s是均衡化后的像素,r是原始像素

    • 对规定的直方图进行均衡化,得到一个变换函数

    v = G(z)

    其中v是均衡化后的像素,z是规定化的像素

    • 上面都是对同一图像的均衡化,其结果应该是相等的,
    6a187b72771ac05a7f7f11241de4e085.png

    详解规定化过程

    对图像进行直方图规定化操作,原始图像的直方图和以及规定化后的直方图是已知的。假设

    Pr(r)

    表示原始图像的灰度概率密度,Pz(z)表示规定化图像的灰度概率密度,(r和z分别是原始图像的灰度级,规定化后图像的灰度级)。

    • 对原始图像进行均衡化操作,则有
    7e4f86e8db8efd6fb6b1a67308ddf678.png
    • 对规定化的直方图进行均衡化操作,则
    9e2150104f04574354a2ed08ffcb9ab4.png
    • 由于是对同一图像的均衡化操作,所以有
    0803d41addfb34a44d39f32365394c50.png
    • 规定化操作的目的就是找到原始图像的像素sk sk 到规定化后图像像素的zk之间的一个映射。有了上一步的等式后,可以得到sk=G(zk),因此要想找到sk想对应的zk只需要在z进行迭代,找到使式子G(zm)−sk的绝对值最小即可。
    • 上述描述只是理论的推导过程,在实际的计算过程中,不需要做两次的均衡化操作,具体的推导过程如下:
    0d7fb633db4f829f5a080bda9de718d0.png

    上面公式表示,假如$s_k$ 规定化后的对应灰度是$z_m$的话,需要满足的条件是$s_k$的累积概率和$z_m$的累积概率是最接近的。 下面是一个具体计算的例子:

    1439dbe31f81c2359e6269bbe6de1e6d.png

    首先得到原直方图的各个灰度级的累积概率$V_s$以及规定化后直方图的各个灰度级的累积概率$V_z$,那么确定$s_k$到$z_m$之间映射关系的条件就是:$$mid V_s - V_z mid$$的值最小。 以$k = 2$为例,其原始直方图的累积概率是:0.65,在规定化后的直方图的累积概率中和0.65最接近(相等)的是灰度值为5的累积概率密度,则可以得到原始图像中的灰度级2,在规定化后的图像中的灰度级是5

    直方图规定化的实现

    直方图规定化的实现可以分为一下三步:

    • 计算原图像的累积直方图
    • 计算规定直方图的累积直方图
    • 计算两累积直方图的差值的绝对值
    • 根据累积直方图差值建立灰度级的映射

    具体代码实现如下:

    void hist_specify(const Mat &src, const Mat &dst,Mat &result){    Histogram1D hist1D;    MatND src_hist = hist1D.getHistogram(src);    MatND dst_hist = hist1D.getHistogram(dst);    float src_cdf[256] = { 0 };    float dst_cdf[256] = { 0 };    // 源图像和目标图像的大小不一样,要将得到的直方图进行归一化处理    src_hist /= (src.rows * src.cols);    dst_hist /= (dst.rows * dst.cols);    // 计算原始直方图和规定直方图的累积概率    for (int i = 0; i < 256; i++)    {        if (i == 0)        {            src_cdf[i] = src_hist.at(i);            dst_cdf[i] = dst_hist.at(i);        }        else        {            src_cdf[i] = src_cdf[i - 1] + src_hist.at(i);            dst_cdf[i] = dst_cdf[i - 1] + dst_hist.at(i);        }    }    // 累积概率的差值    float diff_cdf[256][256];    for (int i = 0; i < 256; i++)        for (int j = 0; j < 256; j++)            diff_cdf[i][j] = fabs(src_cdf[i] - dst_cdf[j]);    // 构建灰度级映射表    Mat lut(1, 256, CV_8U);    for (int i = 0; i < 256; i++)    {        // 查找源灰度级为i的映射灰度        // 和i的累积概率差值最小的规定化灰度        float min = diff_cdf[i][0];        int index = 0;        for (int j = 1; j < 256; j++)        {            if (min > diff_cdf[i][j])            {                min = diff_cdf[i][j];                index = j;            }        }        lut.at(i) = static_cast(index);    }    // 应用查找表,做直方图规定化    LUT(src, lut, result);}

    上面函数的第二个参数的直方图就是规定化的直方图。代码比较简单,这里就不一一解释了。其结果如下:

    02bc18b43ee5aad14116c41d0ab92daa.png

    左边是原图像,右边是规定化的图像,也就是上面函数的第一个和第二个输入参数。原图像规定化的结果如下:

    62b65c6a01b09f71e87904b72026f1fd.png

    原图像规定化后的直方图和规定化的图像的直方图的形状比较类似, 并且原图像规定化后整幅图像的特征和规定化的图像也比较类似,例如:原图像床上的被子,明显带有规定化图像中水的波纹特征。

    直方图规定化过程中,在做灰度映射的时候,有两种常用的方法:

    • 单映射 Single Mapping Law,SML,这种方法也是上面使用的方法,根据累积直方图的差值,从原图像中找到其在规定化图像中的映射。
    • 组映射 Group Mapping Law,GML 这种方法较上述方法复杂不少,但是处理效果较好。

    对于GML的映射方法,一直没有很好的理解,但是根据其算法描述实现了该方法,代码这里先不放出,其处理结果如下:

    1fe574a02e8fd93514ed605a335ce5a0.png

    其结果较SML来说更为亮一些,床上的波浪特征也更为明显,但是其直方图形状,和规定化的直方图对比,第一个峰不是很明显。

    总结

    • 图像的灰度直方图能够很直观的展示图像中灰度级的整体分布情况,对图像的后续处理有很好的指导作用。
    • 直方图的均衡化的是将一幅图像的直方图变平,使各个灰度级的趋于均匀分布,这样能够很好的增强图像对比度。直方图均衡化是一种自动化的变换,仅需要输入图像,就能够确定图像的变换函数。但是直方图的均衡化操作也有一定的确定,在均衡化的过程中对图像中的数据不加选择,这样有可能会增强图像的背景;变换后图像的灰度级减少,有可能造成某些细节的消失;会压缩图像直方图中的高峰,造成处理后图像对比度的不自然等。
    • 直方图规定化,也称为直方图匹配,经过规定化处理将原图像的直方图变换为特定形状的直方图(上面中的示例,就是将图像的直方图变换为另一幅图像的直方图)。它可以按照预先设定的它可以按照预先设定的某个形状来调整图像的直方图,运用均衡化原理的基础上,通过建立原始图像和期望图像
    展开全文
  • 图像直方图归一化图像直方图概念:图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了...图像灰度直方图:一副数字图像有[0~255]灰度级,直方图定义如下:其中,是第k个灰度级(如:255),是该灰度级的个...

    ba12a6100fd05f7712d311b61905f0fb.png

    图像直方图归一化

    图像直方图概念:

    图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。

    图像灰度直方图:一副数字图像有[0~255]灰度级,直方图定义如下:

    其中,是第k个灰度级(如:255),是该灰度级的个数。
    归一化直方图定义如下:

    即:第k个灰度级出现的数量,比上所有灰度级数量总和,也就是概率

    获得图像直方图

    t=imread('a1.jpg')
    subplot(1,2,1),imshow(t),title('原图')
    subplot(1,2,2),imhist(t),title('图像直方图')

    效果图:

    cf7f5712cfa6f9b22ebecbd15ebd240c.png

    Imhist
    该函数用于获取图像数据直方图。在图像增强技术中,图像灰度级直方图有着重要的意义,是直方图修改技术、直方图均衡化等一些图像处理技术的基础。在matlab 的命令窗口中键入doc imhist或help imhist即可获得该函数的帮助信息。

    调用格式:

    imhist(I,n)
    imhist(X,map)
    [counts,x] = imhist(I)
    说明:imhist(I,n)其中,I为灰度的输入图像,n为指定的灰度级数目,缺省值为256;imhist(X,map)计算和显示索引色图像X的直方图,map为调色板。用stem(x,counts)同样可以显示直方图。counts和x分别为返回直方图数据向量和相应的彩色向量。

    这里着重说一下imhist(I,n)的用法:
    验证代码:

    t=imread('a1.jpg')
    subplot(2,3,1),imshow(t),title('原图')
    subplot(2,3,2),imhist(t),title('灰度级数默认:256')
    subplot(2,3,3),imhist(t,128),title('灰度级数:128')
    subplot(2,3,4),imhist(t,64),title('灰度级数:64')
    subplot(2,3,5),imhist(t,32),title('灰度级数:32')
    subplot(2,3,6),imhist(t,16),title('灰度级数:16')

    结果图

    6b010eb64b26fc9d52e9a5e4e9dcb0a1.png


    总结imhist(I,n):

    n的定义是灰度级数,这里我们可以理解为将0~255分成几份,比如默认为256,就是分成256份,一份是1,所以灰度值每隔1就统计一次;又n为128,则把0-255分成128份,一份为2,灰度值每隔2统计一次,所以从对比图像看,n为128的看起来比n为256的更稀疏。

    [counts,x] = imhist(I)这句话的意思是,获取直方图的横坐标和纵坐标,即各个像素级,以及每个像素级上的像素出现的次数,这个有个易错点,就是,counts其实是直方图的纵坐标值,而x才是直方图的横坐标。

    那么获得这两个值有什么用呢? 这里是可以利用这两个值,用stem函数绘出统计图像

    上代码:

    F=imread('a1.jpg');
    I=rgb2gray(F);
    subplot(1,3,1),imshow(I),title('原图')
    subplot(1,3,2),imhist(I),title('原图的图像直方图')
    [count,x]=imhist(I)
    % 获取直方图的横坐标和纵坐标,即各个像素级,以及每个像素级上的像素出现的次数 counts:纵坐标 x:横坐标
    subplot(1,3,3),stem(x,count),title('根据图像直方图绘制的统计图')
    % 通过刚才得到的值,绘制条形图。

    效果图:

    2136428e23f1fa0de7351d8f9a5c92fc.png


    这里看出stem绘出的图像和imhist绘出的图像其实是一样的,只是stem绘出的图像统计了次数。

    如果这里我们需要将图像直方图归一化,其实就是将纵坐标变成当前次数占总次数的概率,这个也很简单,就需要将stem的counts先除以总像素数量就行。
    代码:

    F=imread('a1.jpg');
    I=rgb2gray(F);
    [m,n]=size(I)
    subplot(1,4,1),imshow(I),title('原图')
    subplot(1,4,2),imhist(I),title('原图的图像直方图')
    [count,x]=imhist(I)
    subplot(1,4,3),stem(x,count),title('根据图像直方图绘制的统计图')
    count=count/m/n
    % 获取直方图的横坐标和纵坐标,即各个像素级,以及每个像素级上的像素出现的次数 counts:纵坐标 x:横坐标
    subplot(1,4,4),stem(x,count),title('图像直方图归一化')

    效果图:

    b63ae54c2087e5876e19985eb5a3858a.png

    ba8d1badbae60ac2981b429a5f3f5bfd.png
    展开全文
  • 图像灰度直方图灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率。直方图显示图像数据时会以左暗右亮的分布曲线形式呈现出来。横坐标是灰度级,纵坐标是该灰度级出现的频率。图像...

    图像灰度直方图

    灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率。直方图显示图像数据时会以左暗右亮的分布曲线形式呈现出来。横坐标是灰度级,纵坐标是该灰度级出现的频率。图像的对比度是通过灰度级范围来度量的,而灰度级范围可通过观察灰度直方图得到,灰度级范围越大代表对比度越高;反之对比度越低,低对比度的图像在视觉上给人的感觉是看起来不够清晰,所以通过算法调整图像的灰度值,从而调整图像的对比度是有必要的。

    获得图像的灰度直方图def calGrayHist(img):

    h,w = img.shape[:2]

    gray_hist = np.zeros([256], np.uint64)

    for i in range(h):

    for j in range(w):

    gray_hist[img[i][j]] += 1

    return gray_hist

    不过通常会将纵坐标归一化到[0,1][0,1]区间内,也就是将灰度级出现的频率(像素个数)除以图像中像素的总数,得到归一化灰度直方图,计算公式如下:

    其中,

    是像素的灰度级,

    是具有灰度

    的像素的个数,MN是图像中总的像素个数。

    直方图均衡化 Histogram Equalization

    假如图像的灰度分布不均匀,其灰度分布集中在较窄的范围内,使图像的细节不够清晰,对比度较低。通常采用直方图均衡化及直方图规定化两种变换,使图像的灰度范围拉开或使灰度均匀分布,从而增大反差,使图像细节清晰,以达到增强的目的。

    直方图均衡化,对图像进行非线性拉伸,重新分配图像的灰度值,使一定范围内图像的灰度值大致相等。这样,原来直方图中间的峰值部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较为平坦的直方图。

    直方图的均衡化实际也是一种灰度的变换过程,通常均衡化选择的变换函数是灰度的累积概率

    全局直方图均衡化def equalizeHist_map(img_gray):#输入必须是灰度图像

    h, w = img_gray.shape

    #计算灰度直方图

    gray_hist = calGrayHist(img_gray)

    #计算累加灰度直方图

    cumulative_hist = np.zeros([256], np.uint64)

    for p in range(256):

    if p == 0:

    cumulative_hist[p] = gray_hist[p]

    else:

    cumulative_hist[p] = cumulative_hist[p-1] + gray_hist[p]

    #根据累加灰度直方图得到输入灰度级和输出灰度级之间的映射关系

    relative_map = np.zeros([256], np.uint8)

    coff = 256.0/(h*w)

    for p in range(256):

    q = coff * float(cumulative_hist[p]) -1

    if q < 0:

    relative_map[p] = 0

    else:

    relative_map[p] = math.floor(q)

    return relative_map

    img = cv2.imread('test.png')

    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    relative_map = equalizeHist_map(img_gray)

    img_result = np.zeros(img.shape, np.uint8)

    h,w = img.shape[:2]

    for i in range(h):

    for j in range(w):

    img_result[i][j] = relative_map[img[i][j]]

    虽然全局直方图均衡化方法对提高对比度很有效,但是均衡化处理以后暗区域的噪声可能会被放大,变得清晰可见,而亮区域可能会损失信息。为了解决该问题,提出了自适应直方图均衡化(Aptive Histogram Equalization)方法,自适应直方图均衡化首先将图像划分为不重叠的区域块,然后对每一个块分别进行直方图均衡化。

    线性变换图像增强的缺点:需要根据不同的应用及图像自身的信息进行合理的选择,可能需要进行多次测试,所以选择合适的参数是相当麻烦的。有时候,需要图像具有某一特定的直方图形状(也就是灰度分布),而不是均匀分布的直方图。直方图正规化也叫做直方图匹配,用于将图像变换为某一特定的灰度分布,也就是其目的的灰度直方图是已知的。这其实和均衡化很类似,均衡化后的灰度直方图也是已知的,是一个均匀分布的直方图;而规定化后的直方图可以随意的指定,直方图正规化就是基于当前图像情况自动选取a和b的值的方法。

    ————————————————

    部分参考自:https://blog.csdn.net/victory_tc/article/details/97361911和https://www.cnblogs.com/wangguchangqing/p/7098213.html

    展开全文
  • MATLAB灰度直方图

    2017-11-15 12:12:50
    MATLAB中的灰度直方图的代码,有一般直方图,归一化直方图,彩色图像读取绘制直方图
  • 计算灰度图像的归一化直方图

    千次阅读 2015-04-29 23:52:18
    利用OpenCV 对图像像素进行操作,计算归一化直方图,并在窗口中以图形的方式显示出来。
  • 图像处理基础(8):图像的灰度直方图、直方图均衡、直方图规定(匹配) https://www.cnblogs.com/wangguchangqing/p/7098213.html 本文主要介绍了灰度直方图相关的处理,包括以下几个方面的内容: 利用...
  • 绘制灰度直方图

    2015-04-20 21:31:51
    利用 OpenCV 对图像像素进行操作, 计算归一化直方图。并在窗口中绘制灰度直方图
  • MATLAB中的灰度直方图

    万次阅读 多人点赞 2017-10-25 16:21:43
    灰度直方图
  • 1 灰度直方图简介 1.1 灰度直方图概念 1.2 灰度直方图作用 1.3 绘制的直方图 1.4 归一化直方图 2 matplotlib库 绘制直方图-hist() 3 OpenCV库 绘制直方图-calcHist() 参考资料 1 灰度直方图简介 1.1 灰度...
  • 利用opencv绘制 灰度直方图 RGB直方图 HSV直方图 直方图均衡 灰度直方图介绍: http://hi.baidu.com/wen_sift/blog/item/83fd56ca3e6b1b36b600c887.html 灰度直方图均衡: ...
  • 灰度直方图的统计

    千次阅读 2019-01-15 10:24:38
    灰度直方图的统计1 概述灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度级的函数,它...
  • 图像灰度直方图的均衡和规定 matlab灰度直方图均衡均衡步骤:代码实现:结果对比:规定:定义:作用:做法:主要映射方法:结果对比: 灰度直方图 灰度直方图:反映了该图像中不同灰度级出现的统计情况。 ...
  • Jupyter notebook 6.0.0实现目的均衡化图片为的是归一化图像亮度和增强图像对比度,在本示例我们会使用 cv2.equalizeHist 函数进行处理灰度图像和彩色图像,然后再展示均衡化后的直方图,看其形状。实现代码1,加载...
  • 灰度直方图与直方图均衡

    千次阅读 2018-09-14 08:29:40
    灰度直方图即将一张图的颜色统计出来,以8位灰度图像为例,每个像素的颜色灰度在0-255之间,现在需要统计出每个颜色在图像中出现的频次,横坐标为0-255,纵坐标为频次,或归一化后为概率(即将每个灰度值出现的次数...
  • 本文主要介绍了灰度直方图相关的处理,包括以下几个方面的内容: 利用OpenCV计算图像的灰度直方图,并绘制直方图曲线 直方图均衡的原理及实现 直方图规定(匹配)的原理及实现 图像的灰度直方图 一幅图像由...
  • 最大值 pyplot.axis([0, 256, 0, 1]) #显示网格线 pyplot.grid(True) #key正好就是灰度 keys = histogram.keys() #value是灰度的像素数量,这里是归一化之后的 values = histogram.values() #这里正式绘制直方图 ...
  • 【OpenCV入门指南】第九篇 灰度直方图均衡

    万次阅读 多人点赞 2012-12-24 09:28:19
    上一篇《OpenCV第八篇灰度直方...下面来看看灰度直方图均衡化的函数——cvEqualizeHist 一.cvEqualizeHist函数功能:直方图均衡化,该函数能归一化图像亮度和增强对比度函数原型:/* equalizes histogram of 8-bit s
  • 使用python语言实现的灰度图的直方图均衡!!!!!!
  • 目录1 原理1.1 色彩模型转换原理1.2 灰度直方图绘制原理1.3 直方图均衡原理1.4 直方图规定原理2 实现源代码2.1 MATLAB实现2.1.1 RGB转HSI2.1.2 HSI转RGB2.1.3 绘制灰度直方图2.1.4 直方图均衡2.1.5 直方图规定...
  • 一、直方图均衡: 1、什么是直方图均衡直方图均衡是图像处理领域中利用图像直方图对对比度进行调整的方法。 对比度指的是一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,差异范围越大代表...
  • 数字图像灰度直方图

    千次阅读 2016-01-09 13:26:55
    灰度直方图是数字图像中最简单且有用的工具,这一篇主要总结OpenCV中直方图CvHistogram的结构和应用。 灰度直方图的定义 灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率...
  • 图像灰度直方图灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率。直方图显示图像数据时会以左暗右亮的分布曲线形式呈现出来。横坐标是灰度级,纵坐标是该灰度级出现的频率。图像...
  • 图像的灰度直方图

    千次阅读 2017-03-01 20:00:36
    图像直方图:  从数学上来说,图像直方图描述的是图像的... 从图形上来说,灰度直方图是一个二维直方图,横坐标为图像中各个像素点的灰度级别,纵坐标表示具有各个灰度级别的像素在图像中出现的概率。 /*---
  • usr/bin/env python# -*- coding: utf-8 -*-import Imageimport ImageDrawdef showHist(im, w=512, h=512):hist = im.convert('L').histogram()hist = map(lambda i : h - h * i / max(hist), hist) # 归一化, 之后....
  • matlab 直方图的求解及归一化直方图

    千次阅读 2016-10-24 20:11:04
    I=imread('clock.jpg'); 当读取图像直方图时,出现   就是图像是彩色的先把...然后就会显示出灰度直方图啦 然后归一化直方图: >> [m,n]=size(b); >> [counts ,x]=imhist(b,32); >> counts=counts/m/n;
  • Java+OpenCV学习计算机视觉-灰度直方图及其均衡化灰度直方图均衡化上一篇HelloCV下一篇:空间滤波及边缘提取 灰度直方图 灰度直方图简单来说就是一个柱状图,横坐标是灰度0~255,纵坐标是频率或者是频数。 具体可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,425
精华内容 3,370
关键字:

归一化灰度直方图