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

    2012-03-14 12:54:02
    统计图像的灰度直方图 PPM文件按照灰度映射直方图来改变本身的像素值 输出灰度直方图".csv" 输出灰度直方图".csv" 生成修改后的PPM图像
  • 灰度直方图的统计1 概述灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度级的函数,它表示图像中具有...

    灰度直方图的统计

    1 概述

    灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。

    灰度直方图主要应用于图像分割、图像增强、及图像灰度变换等处理过程。

    从数学的角度来说,灰度图像直方图描述的是图像各个灰度级的统计特征,它是图像灰度值的一个函数来统计一幅图像中各个灰度级出现的频率或次数。通常会将纵坐标归一化到[0,1]区间内,也就是将灰度级出现的频率(像素个数)除以图像中像素的总数。灰度直方图的计算公式如下:

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

    2 matlab实现灰度直方图的统计

      Matlab实现直方图统计方法1(未归一化):

    close all

    clear all

    clc

    Irgb=imread('1.jpg');

    Igray=rgb2gray(Irgb);

    row=size(Igray,1);

    column=size(Igray,2);%2dimision

    N=zeros(1,256);%zeros(256)生成256x256矩阵

    for i=1:row

        for j=1:column

            k=Igray(i,j);

            N(k+1)=N(k+1)+1;%记录每个灰度值的像素数

        end

    end

    figure,

    subplot(221),imshow(Irgb);

    subplot(222),imshow(Igray);%subplot将窗口分为1x2两个窗口,现在在第一个小窗口绘图

    subplot(223),bar(N);%bar函数绘制直方图,为N中每一行的每一个元素绘制一个条

    axis tight;%设置坐标轴

    a3ff934b0400c598824d69ef56710e87.png

    1 matlab直方图统计(未归一化)

    Matlab实现直方图统计方法2(归一化):

    close all

    clear all

    clc

    Irgb=imread('1.jpg');

    Igray=rgb2gray(Irgb);

    % get the histogram

    [Y,X]=size(Igray); % Y Row , X column

    grayvalue=unique(Igray);

    imginfo=[];

    for i=1:length(grayvalue)

            [ANSy,ANSx]=find(Igray==grayvalue(i));

            imginfo.gray(i)=grayvalue(i);

            imginfo.position{i}=[ANSy,ANSx];

            imginfo.count(i)=length(ANSy)/(Y*X);

    end

    figure,

    subplot(2,2,1),imshow(Irgb),title('Original Image');

    subplot(2,2,2),imshow(Igray),title('Gray Image');

    subplot(2,2,3),stem(imginfo.gray,imginfo.count,'Marker','none');%stem(xy);绘制以x为横轴、 y为纵轴的脉冲杆图图形

    xlabel('Graylevel'),ylabel('Proportion'),axis([0 255 0 max(imginfo.count)]);

    title('Histogram of the orginial image')

    40566b2f08d7d877ff4cb196eec5caf3.png

    2 matlab直方图统计(归一化)

    3 FPGA的仿真实现

    FPGA的直方图统计电路的设计很简单,以8bit灰度图像为例,总共有0-255种灰度,以输入的灰度作为双端口RAM的地址,然后对图像的每个灰度值与地址比对,相同的在原地址的数值上加一来完成正副图像的统计。

    7feb350196b4ae371e8e471a84cf9d08.png

    3实验原图

    b01aa04dcb3c6fbb78974bfa8a9136b5.png

    4 modelsim仿真结果展示

    5c44bc0e0b11ce1380631ea11a84d2a2.png

    5 直方图FPGA仿真统计结果展示

    展开全文
  • 灰度直方图是数字图像中最简单且有用的工具,这一篇主要总结OpenCV中直方图CvHistogram的结构和应用。灰度直方图的定义灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):其横...

    灰度直方图是数字图像中最简单且有用的工具,这一篇主要总结OpenCV中直方图CvHistogram的结构和应用。

    灰度直方图的定义

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

    一维直方图的结构表示为

    7865597e7baed15b645d6c50f5f06d57.png

    高维直方图可以理解为图像在每个维度上灰度级分布的直方图。常见的是二维直方图。如红-蓝直方图的两个分量分别表示红光图像的灰度值和蓝光图像灰度值的函数。其图像坐标(Dr,Db)处对应在红光图像中具有灰度级Dr同时在蓝光图像中具有灰度级Db的像素个数。这是基于多光谱——每个像素有多个变量——的数字图像,二维中对应每个像素统计个变量。

    OpenCV生成图像直方图 实验代码下载:

    具体下载目录在 /2013年资料/10月/20日/OpenCV 数字图像灰度直方图

    OpenCV中的直方图CvHistogram

    注意我们在上面理解直方图的意义时更多把他想象成一幅“图”,继而理解图中横坐标,纵坐标的意义。而在OpenCV中,应该更多把直方图看做“数据结构”来理解。

    OpenCV中用CvHistogram表示多维直方图(http://www.opencv.org.cn/index.php/Cv%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86#CvHistogram):

    typedef struct CvHistogram

    {

    int    type;

    CvArr*  bins;  //存放每个灰度级数目的数组指针

    float  thresh[CV_MAX_DIM][2];  //均匀直方图

    float** thresh2; //非均匀直方图

    CvMatND mat;  //直方图数组的内部数据结构

    }

    CvHistogram;

    这个结构看起来简单(比IplImage*元素少多了。。。)其实并不太好理解。

    第一个成员type用来指定第二个成员bins的类型。OpenCv中常见到CvArr*的接口,可以用以指定诸如CvMat、CvMatND、IplImage的类型,其实CvArr*的是一个指向void的指针。在函数内部有时需要得到确切的指向类型,这就需要type来指定。

    thresh用来指定统计直方图分布的上下界。比如[0 255]表示用来统计图像中像素分别在灰度级[0 255]区间的分布情况,CV_MAX_DIM对应直方图的维数,假如设定二维红-蓝直方图的thresh为[0 255;100 200],就是分别统计红色图像灰度级在[0 255]以及蓝色图像在灰度级[100 200]的分布情况。

    thresh用以指定均匀直方图的分布,我们按每个像素理解自然是“均匀分布”,其实也可以统计像素在几个区间的分布。如果统计像素在2个区间的分布,则对应[0 255]的上下界,均匀分布统计的区间即[0 127] [127 255]分布的概率,这也是为什么thresh第二个维数默认为2——会自动均分上下界;而thresh2指定非均匀的分布,这就需要指定每个区间的上下界,如果要统计直方图在区间(0,10,100,255)的分布,那需要指定thresh2的一个维度为[0 10 100 255],所以用float**形式表示。

    mat简单说就是存储了直方图的信息,即我们统计的直方图分布概率。

    推荐阅读:

    0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • 这就是我们下面要说的图像的灰度直方图,这是最简单的一种。但是原理都是一样的。图像的直方图有大量的用处,它反应了图像的某些特征,以至于可以用来进行图像搜索。获得直方图信息代码如下:public int[] hist(){...

    上一篇文章中,已经说过了图像的灰度化,灰度化之后,我们希望了解像素在0-255的分布情况。这就是我们下面要说的图像的灰度直方图,这是最简单的一种。但是原理都是一样的。图像的直方图有大量的用处,它反应了图像的某些特征,以至于可以用来进行图像搜索。

    获得直方图信息代码如下:

    public int[] hist(){

    toGray();

    int[] hist = new int[256];

    int len = h*w;

    for(int i=0;i

    hist[data[i]]++;

    return hist;

    }

    然后我们要做的就是画出图像的统计直方图,代码如下:

    public BufferedImage getHist(){

    toGray();

    int[] intensity = hist();

    int size = 300;

    BufferedImage pic = new BufferedImage(size,size, BufferedImage.TYPE_4BYTE_ABGR);

    Graphics2D g2d = pic.createGraphics();

    g2d.setPaint(Color.BLACK);

    g2d.fillRect(0, 0, size, size);

    g2d.setPaint(Color.WHITE);

    g2d.drawLine(5, 250, 265, 250);

    g2d.drawLine(5, 250, 5, 5);

    g2d.setPaint(Color.GREEN);

    int max = math.findMaxValue(intensity); //找到直方图中最大的值

    float rate = 200.0f/((float)max);

    int offset = 2;

    for(int i=0; i

    int frequency = (int)(intensity[i] * rate);

    g2d.drawLine(5 + offset + i, 250, 5 + offset + i, 250-frequency);

    }

    g2d.setPaint(Color.RED);

    g2d.drawString("", 100, 270);

    return pic;

    }

    以上代码参考了

    运行结果如下:

    0818b9ca8b590ca3270a3433284dd417.png                       

    0818b9ca8b590ca3270a3433284dd417.png

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

    灰度直方图

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

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

    灰度直方图的计算公式如下:

    p(rk)=nk/MN

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

    直方图均衡化 Histogram Equalization

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

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

    均衡化算法

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

    计算原图像的灰度直方图 P(Sk)=nknP(Sk)=nkn,其中nn为像素总数,nknk为灰度级SkSk的像素个数

    计算原始图像的累积直方图 CDF(Sk)=∑i=0knin=∑i=0kPs(Si)CDF(Sk)=∑i=0knin=∑i=0kPs(Si)

    Dj=L⋅CDF(Si)Dj=L⋅CDF(Si),其中 DjDj是目的图像的像素,CDF(Si)CDF(Si)是源图像灰度为i的累积分布,L是图像中最大灰度级(灰度图为255)

    灰度直方图均衡化实现的步骤

    1.统计灰度级中每个像素在整幅图像中的个数

    2.计算每个灰度级占图像中的概率分布

    3.计算累计分布概率

    4.计算均衡化之后的灰度值

    5.映射回原来像素的坐标的像素值

    示例说明

    来看看通过上述步骤怎样实现的拉伸。假设有如下图像:

    5b924b2e3b1e2cb4e54af377ef66a485.png

    得图像的统计信息如下图所示,并根据统计信息完成灰度值映射:

    f377382b5a745b7ba9d7fa4bce149a80.png

    映射后的图像如下所示:

    498dd2e79186f9ae88683ee880f2e86c.png

    灰度直方图均衡化实现

    //img_size为图像大小//Image_Use为图像数组

    //Use_ROWS为行,Use_Line为列

    float img_size = Use_ROWS * Use_Line * 1.0;int count_data[256],huidu_data[256]; //计数统计、均衡化的灰度值

    float midu_data[256],leijimidu_data[256]; //概率密度、累计概率密度//数组初始化

    memset(count_data, 0, sizeof(count_data));

    memset(midu_data,0.0, sizeof(midu_data));

    memset(leijimidu_data,0.0, sizeof(leijimidu_data));

    memset(huidu_data,0.0, sizeof(huidu_data));//1.统计灰度级中每个像素在整幅图像中的个数

    for(int i = 0; i < Use_ROWS; i++)

    {for(int j = 0; j < Use_Line; j++)

    {

    count_data[Image_Use[i][j]]++;

    }

    }//2.计算每个灰度级占图像中的概率分布

    for(int i = 0; i < 256; i++)

    {

    midu_data[i]= count_data[i]/img_size;

    }//3.计算累计分布概率

    leijimidu_data[0] = midu_data[0];for(int i = 1; i < 256; i++)

    {

    leijimidu_data[i]= midu_data[i]+leijimidu_data[i-1];

    }//4.计算均衡化之后的灰度值

    for(int i =0; i <256; i++)

    {

    huidu_data[i]= (int)(255 *leijimidu_data[i]);

    }//5.映射回原来像素的坐标的像素值

    for(int i = 0; i < Use_ROWS; i++)

    {for(int j = 0; j < Use_Line; j++)

    {

    Image_Use[i][j]=huidu_data[Image_Use[i][j]];

    }

    }

    原始图像:

    cb443667fcd6f22bfdc859f015a99b04.png

    直方图均衡化后的图像:

    feb604c48ef9648dacabf0ed22016752.png

    直方图规定化

    参考:

    展开全文
  • OpenCV图像灰度直方图

    2019-11-01 10:04:01
    OpenCV计算图像灰度直方图,绘制图像灰度直方图灰度分布。
  • Author:ljgibbs Version:1.0Train 2 灰度直方图统计 需求Welcome,对于一幅灰度图像,可以表示为I(x,y)。I是图像的强度大小。灰度直方图就是统计不同灰度的分布概率。比如对于一个像素bit位为8的图像,那么其灰度...
  • 图像的灰度直方图(histogram),就是将图像转化成灰度图像之后,统计各个像素点的灰度值,绘制成直方图,其横轴是灰度值(0,255),纵轴是该灰度值所对应的像素的数目。对灰度直方图做积分=图像的size。灰度直方图...
  • 图像的灰度直方图(histogram),就是将图像转化成灰度图像之后,统计各个像素点的灰度值,绘制成直方图,其横轴是灰度值(0,255),纵轴是该灰度值所对应的像素的数目。对灰度直方图做积分=图像的size。灰度直方图1 ...
  • MATLAB中的灰度直方图

    万次阅读 多人点赞 2017-10-25 16:21:43
    灰度直方图
  • 1灰度直方图  1.1 概念 灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。 灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。 灰度直方图是灰度级的函数,它表示图像中...
  • 灰度直方图在数字图像处理中,正确使用与分析灰度直方图是很重要的,在什么情况下使用?有哪些检测标准?直方图曲线表示什么意思?通过阅读这篇文章,你就有了答案。When to Use 何时使用The histogram is a...
  • 灰度直方图在数据统计分析、图像处理中有着比较广泛的应用,下面就介绍一下如何在Python中使用matplotlib来绘制灰度直方图。下面直接看代码:import matplotlib.pyplot as pltimport numpy as nprandom_state = np....
  • 灰度直方图的统计1 概述灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度级的函数,它表示图像中具有...
  • 本文主要介绍了灰度直方图相关的处理,包括以下几个方面的内容:利用OpenCV计算图像的灰度直方图,并绘制直方图曲线直方图均衡化的原理及实现直方图规定化(匹配)的原理及实现图像的灰度直方图一幅图像由不同灰度值的...
  • MATLAB灰度直方图

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,901
精华内容 2,360
关键字:

灰度直方图