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

    2021-04-23 22:52:14
    原理灰度直方图是数字图像处理中一个最简单、最有用的工具,它描述了一幅图像的灰度级内容 。任何一幅图像的直方图都包括了可观的信息,某些类型的图像可由其直方图完全描述。灰度直方图是灰度值的函数,描述的是...

    原理

    灰度直方图是数字图像处理中一个最简单、最有用的工具,它描述了一幅图像的灰度级内容 。任何一幅图像的直方图都包括了可观的信息,某些类型的图像可由其直方图完全描述。灰度直方图是灰度值的函数,描述的是图像中具有该灰度值的像素的个数,其横坐标表示像素的灰度级别,纵坐标是该灰度出现的频率 ( 像素个数与图像像素总数之比 )

    灰度图代码:

    src = dst = (Uint8 *)frameBuffPtr->frame.frameBufferPtr;

    for ( i = 0 ; i < inputHeight ; i ++ )

    {

    for( j = 0 ; j < inputWidth ; j++ ,dst += 2)

    *dst = 0x80;  /* CbCr=128,转化灰度图 */

    /* statistic the y diginal */

    ICETEKDM6437B2Statistic(src + i * inputWidth * 2, inputWidth);

    }

    /* draw the histogram on screen

    第一个参数指出直方图的显示起始位置*/

    ICETEKDM6437B2Histogram(src + inputWidth * (inputHeight - HISTOHIGH - 10) * 2 + 50 * 2, inputWidth);

    -----------------------------------------------------------------------------------------------

    void ICETEKDM6437B2Statistic(unsigned char *src, short pixelCount)

    {

    int i;

    for ( i=0 ; i{

    nHisto[src[i * 2 + 1]]++;//y 值构成的数组,统计Y值分布

    }

    }

    -----------------------------------------------------------------------------------------------

    void ICETEKDM6437B2Histogram(unsigned char * src, short pixelCount)

    {

    unsigned char * dst = src;

    m_nWork=0;

    /* look for the max data */

    for ( mi=0 ; mi < HISTOWIDTH ; mi++ )

    if ( m_nWork < nHisto[mi] )

    m_nWork = nHisto[mi];

    /* get the scale */

    m_nWork /= (HISTOHIGH - 1);// max/127

    /* get the scale count */

    for ( mi=0;mi<256;mi++ )

    {

    nHisto[mi]/=m_nWork;// 此数组用来统计新值 0-127

    }

    /* draw the histogram 画直方图*/

    for(mi = 0 ; mi < HISTOHIGH ; mi++)

    {

    dst = src;

    for(mj = 0 ; mj < HISTOWIDTH ; mj++)

    {

    /* Set cbcr */

    *dst++ = 0x80;//cr=cb=128

    if(mi >= (HISTOHIGH - 1 - nHisto[mj]))

    /* Set y value*/

    *dst++ = HISTOCOLOR;//y=200

    else

    *dst++ = 1;//y=0

    }

    src += pixelCount * 2;//下一行

    }

    js++; js%=2;

    for ( mi=0 ; minHisto[mi]=0;//清零

    }

    阅读(6811) | 评论(0) | 转发(0) |

    0

    上一篇:图像翻转

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

    2021-03-01 08:06:51
    这就是我们下面要说的图像灰度直方图,这是最简单的一种。但是原理都是一样的。图像的直方图有大量的用处,它反应了图像的某些特征,以至于可以用来进行图像搜索。获得直方图信息代码如下: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

    展开全文
  • 【OpenCV】数字图像灰度直方图

    万次阅读 多人点赞 2012-05-25 11:05:02
    灰度直方图是数字图像中最简单且有用的工具,这一篇主要总结OpenCV中直方图CvHistogram的结构和应用。 灰度直方图的定义 灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):...

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

    灰度直方图的定义

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

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

    OpenCV中的直方图CvHistogram

    注意我们在上面理解直方图的意义时更多把他想象成一幅 “图”,继而理解图中横坐标,纵坐标的意义。而在OpenCV中,应该更多把直方图看做 “数据结构”来理解。
    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简单说就是存储了直方图的信息,即我们统计的直方图分布概率。

    创建直方图 cvCreateHist()

    OpenCV中用cvCreateHist()创建一个直方图:
    CvHistogram* cvCreateHist( 
    	int dims, //直方图维数 
    	int* sizes,//直翻图维数尺寸
    	int type, //直方图的表示格式
            float** ranges=NULL, //图中方块范围的数组
    	int uniform=1 //归一化标识
    	);
    size数组的长度为dims,每个数表示分配给对应维数的bin的个数。如dims=3,则size中用[s1,s2,s3]分别指定每维bin的个数。
    type有两种:CV_HIST_ARRAY 意味着直方图数据表示为多维密集数组 CvMatND; CV_HIST_TREE 意味着直方图数据表示为多维稀疏数组 CvSparseMat。
    ranges就是那个复杂的不好理解的thresh的范围,他的内容取决于uniform的值。uniform为0是均匀的,非0时不均匀。
    计算图像直方图的函数为CalcHist():
    void cvCalcHist( 
    	IplImage** image, //输入图像(也可用CvMat**)
    	CvHistogram* hist, //直方图指针
                     int accumulate=0, //累计标识。如果设置,则直方图在开始时不被清零。
    	const CvArr* mask=NULL //操作 mask, 确定输入图像的哪个象素被计数
    	);
    
    要注意的是这个函数用来计算一张(或多张) 单通道图像的直方图,如果要计算多通道,则用这个函数分别计算图像每个单通道。

    实践:一维直方图

    下面实践一下用OpenCV生成图像的一维直方图
    int main( )
    {
    	IplImage * src= cvLoadImage("baboon.jpg");
    	IplImage* gray_plane = cvCreateImage(cvGetSize(src),8,1);
    	cvCvtColor(src,gray_plane,CV_BGR2GRAY);
    
    	int hist_size = 256;    //直方图尺寸
    	int hist_height = 256;
    	float range[] = {0,255};  //灰度级的范围
    	float* ranges[]={range};
    	//创建一维直方图,统计图像在[0 255]像素的均匀分布
    	CvHistogram* gray_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);
    	//计算灰度图像的一维直方图
    	cvCalcHist(&gray_plane,gray_hist,0,0);
    	//归一化直方图
    	cvNormalizeHist(gray_hist,1.0);
    
    	int scale = 2;
    	//创建一张一维直方图的“图”,横坐标为灰度级,纵坐标为像素个数(*scale)
    	IplImage* hist_image = cvCreateImage(cvSize(hist_size*scale,hist_height),8,3);
    	cvZero(hist_image);
    	//统计直方图中的最大直方块
    	float max_value = 0;
    	cvGetMinMaxHistValue(gray_hist, 0,&max_value,0,0);
    	
    	//分别将每个直方块的值绘制到图中
    	for(int i=0;i<hist_size;i++)
    	{
    		float bin_val = cvQueryHistValue_1D(gray_hist,i); //像素i的概率
    		int intensity = cvRound(bin_val*hist_height/max_value);  //要绘制的高度
    		cvRectangle(hist_image,
    			cvPoint(i*scale,hist_height-1),
    			cvPoint((i+1)*scale - 1, hist_height - intensity),
    			CV_RGB(255,255,255));  
    	}
    	cvNamedWindow( "GraySource", 1 );
    	cvShowImage("GraySource",gray_plane);
    	cvNamedWindow( "H-S Histogram", 1 );
    	cvShowImage( "H-S Histogram", hist_image );
    
    	cvWaitKey(0);
    }
    试验结果:

    对应的,我们可以用一样的思路统计每个通道的直方图,并绘制图像每个通道像素的分布:


    实践:二维直方图

    我们也可以结合OpenCV的例子生成二维直方图:
    IplImage* r_plane  = cvCreateImage( cvGetSize(src), 8, 1 );
    	IplImage* g_plane  = cvCreateImage( cvGetSize(src), 8, 1 );
    	IplImage* b_plane  = cvCreateImage( cvGetSize(src), 8, 1 );
    	IplImage* planes[] = { r_plane, g_plane };
    	//将HSV图像分离到不同的通道中
    	cvCvtPixToPlane( src, b_plane, g_plane, r_plane, 0 );
    
    	// 生成二维直方图数据结构
    	int r_bins =256, b_bins = 256; 
    	CvHistogram* hist;
    	{
    		int    hist_size[] = { r_bins, b_bins };
    		float  r_ranges[]  = { 0, 255 };          // hue is [0,180]
    		float  b_ranges[]  = { 0, 255 }; 
    		float* ranges[]    = { r_ranges,b_ranges };
    		hist = cvCreateHist( 2, hist_size, CV_HIST_ARRAY, ranges, 1); 
    	}
    	//计算一张或多张单通道图像image(s) 的直方图
    	cvCalcHist( planes, hist, 0, 0 );
    刚才的图我们是对应每个横坐标绘制纵坐标的直方块,二维的图需要绘制每个点:
    for( int h = 0; h < r_bins; h++ ) {
      for( int s = 0; s < b_bins; s++ ) {
        float bin_val = cvQueryHistValue_2D( hist, h, s ); //查询直方块的值
            int intensity = cvRound( bin_val * 255 / max_value );
            cvRectangle( hist_img, 
              cvPoint( h*scale, s*scale ),
              cvPoint( (h+1)*scale - 1, (s+1)*scale - 1),
              CV_RGB(intensity,intensity,intensity), 
              CV_FILLED);
        }
    }


    最终生成二维直方图:

    直方图的应用以后再讨论。

    转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7600666

    实验代码下载:http://download.csdn.net/detail/xiaowei_cqu/4328881


    Mat格式的参考这里:

    http://blog.csdn.net/xiaowei_cqu/article/details/8833799



    (转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu 未经允许请勿用于商业用途)







    展开全文
  • 图像处理篇-利用matlab绘制灰度直方图

    万次阅读 多人点赞 2019-04-21 16:11:40
    利用matlab绘制灰度直方图 figure; I=imread('G:\matlab\img\1.jpg'); subplot(1,2,1);imshow(I); title('原始图像'); imwrite(I,'test.png'); subplot(1,2,2); imhist(y); title('灰度图像直方图'); ...
  • 图像灰度直方图的均衡化和规定化 matlab灰度直方图均衡化均衡化步骤:代码实现:结果对比:规定化:定义:作用:做法:主要映射方法:结果对比: 灰度直方图 灰度直方图:反映了该图像中不同灰度级出现的统计情况。 ...
  • 图像显示灰度直方图

    千次阅读 2021-11-12 17:00:31
    #本程序用于显示图片的直方图 import cv2 #导入opencv模块 import numpy as np import matplotlib.pyplot as plt img = cv2.imread("D:\jupyter notebook\img/1.jpeg") #导入图片,图片放在程序所在目录 cv2....
  • 遍历灰度图像每个像素,根据其灰度保存在灰度数组的不同位置。使用bar函数展示灰度数组,并与imhist函数结果对比,进行验证。效果原左侧为imhist函数结果,右侧为实现结果代码 clear all; ima = imread
  • 图像灰度直方图 以及 直方图均衡化 1 一张图片可以看作 由许许多多不同灰度值的像素组成 2. 灰度图直方图 表示 在不同灰度下的像素数量 3. 通常为 UINT8 0~255 表示 三通道RGB 图像 特定情况下,需要转化 RGB TO ...
  • 1、灰度变换1)灰度图的线性变换Gnew = Fa * Gold + Fb。Fa为斜线的斜率,Fb为y轴上的截距。Fa>1 输出图像的对比度变大,否则变小。Fa=1 Fb≠0时,图像灰度上移或下移,效果为图像变亮或变暗。Fa=-1,Fb=255时,...
  • 灰度直方图一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征。图像灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少。图像灰度直方图是灰度级...
  • 图像直方图(也叫灰度直方图)反映了图像像素分布的统计特性,是图像处理中简单有效的工具。图像直方图广泛地应用于图像处理的各个领域,如:特征提取、图像匹配、灰度图像的阈值分割、基于颜色的图像检索以及图像...
  • 图像灰度直方图

    万次阅读 多人点赞 2018-10-02 21:01:23
    灰度直方图是反映一幅图像中各灰度级像素出现的频率与灰度级的关系,以灰度级为横坐标,频率为纵坐标,绘制频率同灰度级的关系图像就是衣服灰度图像的直方图。 简单地说,就是把一幅图像中每一个像素出现的次数都先...
  • 灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。 如果将图像总像素亮度(灰度级别)看成是一个随机变量,则其分布情况就反映了图像的统计特性,这可用...
  • function [yout,x] = imhist(varargin)%IMHIST Display histogram of image data.% IMHIST(I) displays a histogram for the intensity image I whose number of% bins are specified by the image type.If I ...
  • 灰度直方图图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数。 灰度直方图反映了图像中的灰度分布规律,直观地表现了图像中各灰度级的占比,很好地体现出图像的亮度和对比度信息:灰度图分布居中...
  • opencv图像处理进阶——灰度直方图

    千次阅读 2021-12-05 13:05:29
    灰度直方图的基本概念及绘制、直方图均衡化的步骤,自编码实现直方图均衡化
  • How to do histogram equalization for multiple grayscaled images stored in a NumPy array easily?I have the 96x96 pixel NumPy data in this 4D format:(1800, 1, 96,96)解决方案Moose's comment which points ...
  • 灰度图像直方图

    2021-02-26 10:30:02
    //获取直方图数据 for(int i=0;i histogram[i] = 0; } int index = 0; for(int row=0;row int tr = 0; for(int col=0;col index = row*width+col; tr = (inPixels[index] >> 16) & 0xff; histogram[tr] ++; } } ...
  • 图像灰度直方图可以统计出图像中的每一个像素的灰度值在整个图像中出现的次数。 1.灰度直方图介绍 如上图就是一个图像灰度直方图,横坐标代表的是像素值的范围:[0,255],越接近0表示越黑,越接近255表示图像...
  • untitled2.jpg (46.47 KB, 下载次数: 12)2016-4-12 13:14 上传untitled1.jpg (24.23 KB, 下载次数: 0)2016-4-12 13:...基于灰度直方图阈值对图一进行图像分割,目的是分割出向日葵。但是该如何确定阈值。我试过多次...
  • 前言学以致用,乐趣无穷。由于元旦要旅游,所以把手机中现有照片都copy到PC备份,腾出空间,...就是说图像质量标准是什么呢?网上还真的搜索到了,包括有图像分析软件lmatest等。接着就是自动处理图片,然后按我的标...
  •   图像处理流程,通常包含三个阶段:   (1)low level:被称为图像滤波(预处理)。图像to图像——增强操作(锐化、平滑)、差值操作(变大变小过程中)、去噪、裁剪…   (2)intermediate level:被称为...
  • 灰度直方图 G=imread ('cameraman.tif');%读取图像 figure(1), imhist(G); %灰度直方图 M = size(G,1); %获得矩阵的维度,行数 N = size(G,2); %获得矩阵的维度,列数 G=double(G); %变换图像存储格式 for i=1:M ...
  • 画彩色图像灰度直方图,图片放在D盘根目录下,没有直接使用hist函数,使用numpy数组自己计算的,加深理解。 import cv2 import numpy as np import sys import matplotlib.pyplot as plt def calcGrayHist(image): ...
  • 作用 直方图均衡化的作用是图像增强。 原理 参考这篇文章 实验步骤 ...function [J] = imhisteq(I) ... %获得输入图像尺寸M、N、C(size函数) ...%矩阵F中的数据由uint8类型转换为...%计算图像F的灰度直方图h(imhist.
  • Computer Knowledge and Technology 电脑知识与技术第5卷第32期(2009年11月)本栏目责任编辑:唐一东人工智能及识别技术灰度直方图特征提取的Matlab 实现刘益新1,郭依正2(1.金山职业技术学院计算机系,江苏扬中...
  • qt画个灰度直方图

    千次阅读 2021-11-09 17:18:19
    数字图像处理(15): 灰度直方图(matplotlib 和OpenCV 绘制直方图) QCustomPlot简单介绍和例程 qt超强精美绘图控件 - QCustomPlot一览 及 安装使用教程 下面两个链接 第一个说qimage格式有对齐,mat格式不用对齐 第二...
  • 文章目录图像灰度灰度直方图直方图均衡化代码 图像灰度图像灰度化是将彩色图像转换为灰度图像。OpenCV中使用cv2.cvtColor()函数进行色彩空间转换,第一个参数为图像,第二个参数为转换类型,RGB图像转灰度图像...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,859
精华内容 11,543
关键字:

图像灰度直方图