颜色直方图的计算过程,使用MATLAB计算RGB数据的颜色直方图

时尚网,时尚女装,时尚杂志

使用MATLAB计算RGB数据的颜色直方图

I=imread('sample.bmp'); % 文件名自己改

siz=size(I);

I1=reshape(I,siz(1)*siz(2),siz(3)); % 每个颜色通道变为一列

I1=double(I1);

[N,X]=hist(I1, [0:1:255]); % 如果需要小矩形宽一点,划分区域少点,可以把步长改大,比如0:5:255

bar(X,N(:,[3 2 1])); % 柱形图,用N(:,[3 2 1])是因为默认绘图的时候采用的颜色顺序为b,g,r,c,m,y,k,跟图片的rgb顺序正好相反,所以把图片列的顺序倒过来,让图片颜色通道跟绘制时的颜色一致

xlim([0 255])

hold on

plot(X,N(:,[3 2 1])); % 上边界轮廓

hold off

如何使用MATLAB计算彩色图像的颜色直方图?

从别人那里学来的:

1.将RGB图象转为HSV

2. 将H分量量化16级,将S分量和V分量分别量化为4级.

3.将三个颜色分量合成为一维特征向量:L = H*Qs*Qv+S*Qv+v;Qs,Qv分别是S和V的量化级数, L取值范围[0,255].

4.计算L的直方图分布

但愿合你胃口,呵呵!

如何使用MATLAB计算彩色图像的颜色直方图

如何使用MATLAB计算彩色图像的颜色直方图

将H分量量化16级,将S分量和V分量分别量化为4级.

将三个颜色分量合成为一维特征向量:L = H*Qs*Qv+S*Qv+v;Qs,Qv分别是S和V的量化级数, L取值范围[0,255].计算L的直方图分布

参考程序

I=imread('lena.jpg')R=I(:,:,1);G=I(:,:,2);B=I(:,:,3);figure,imhist(R);title('R');figure,imhist(G);title('G');figure,imhist(B);title('B');

直方图中的频率如何计算

频率=频数/数据总数。

频率的性质

1、当重复试验的次数n逐渐增大时,频率fn(A)呈现出稳定性,逐渐稳定于某个常数,这个常数就是事件A的概率.这种“频率稳定性”也就是通常所说的统计规律性。

2、频率有如下性质:

(1)非负性:0小于等于fn(A)小于等于1

(2)规范性:fn(Ω)=1 (注:Ω表示样本空间)

(3)可加性

扩展资料:

频率在随机事件在n次试验中发生m次的相对频次m/n。一般物理科学中频率指每秒中的振动次数,可以是随机的,也可以是确定性的。

在一定条件下,对所研究的对象进行观察或测验,每实现一次条件组,称为一次试验。其结果称为事件。在一次试验中,可能发生也可能不发生的事件称为随机事件。

随机事件 A发生的概率p(A)是该事件出现的可能性大小的度量。其数值在0与1之间。在一定条件下进行试验,如果事件A不可能发生,则p(A)=0;如果事件A必然发生,则p(A)=1。随着试验次数n的增大,频率接近于概率的可能性也越大。

参考资料来源:百度百科-频率

直方图频率计算公式

频率分布直方图 纵轴表示频率/组距,横轴表示各组组距,若求某一组的频率,就用纵轴的频率/组距*横轴的组距,即得该组频率。

频率=频数/数据总数。

扩展资料:

特点

能够显示各组频数分布的情况;

易于显示各组之间频数的差别。

目的

作直方图的目的就是通过观察图的形状,判断生产过程是否稳定,预测生产过程的质量。

判断一批已加工完毕的产品;

搜集有关数据。

直方图将数据根据差异进行分类,特点是明察秋毫地掌握差异。

在公路工程质量管理中,作直方图的目的有:

估算可能出现的不合格率;

考察工序能力估算法

判断质量分布状态;

参考资料来源:百度百科-频率直方图

①求该图像的灰度直方图。②对该图像进行直方图均衡化处理,写出过程和结果。

首先需要说明的是,如果你说的是一道完整的题目,则这道题目没有唯一解,因为题目中没有说明原始图像的灰度级数(比如原始图像是16个灰度级的,或者是32个灰度级的,等等)。为了给你提供一个解题思路,现在人为假设原始图像是16个灰度级的,其它灰度级的解法类似。

1、图像的灰度直方图求法为:

(1)先计算图像中各个灰度级的出现频率,用h(i)表示灰度级i的出现频率,其值等于灰度级出现次数/图像像素个数:

h(0)=2/16

h(1)=1/16

h(2)=3/16

h(3)=2/16

h(4)=0/16

h(5)=1/16

h(6)=4/16

h(7)=1/16

h(8)=1/16

h(9)=1/16

h(10)=h(11)=h(12)=h(13)=h(14)=h(15)=0/16。

然后以灰度级i为横轴,出现频率h(i)为纵轴即可绘制出图像对应的直方图。

(2)图像进行直方图均衡化处理的过程为:

先计算累积分布,用r(i)表示灰度级i的累积分布:

r(0)=h(0)=2/16

r(1)=r(0)+h(1)=2/16+1/16=3/16

r(2)=r(1)+h(2)=3/16+3/16=6/16

r(3)=r(2)+h(3)=6/16+2/16=8/16

r(4)=r(3)+h(4)=8/16+0/16=8/16

r(5)=r(4)+h(5)=8/16+1/16=9/16

r(6)=r(5)+h(6)=9/16+4/16=13/16

r(7)=r(6)+h(7)=13/16+1/16=14/16

r(8)=r(7)+h(8)=14/16+1/16=15/16

r(9)=r(8)+h(9)=15/16+1/16=16/16=1

r(10)=r(11)=r(12)=r(13)=r(14)=r(15)=1

将累积分布进行量化(量化时需要用到原始图像的灰度级数,这也是为什么前面需要说明的原因),量化后的灰度级用rq(i)表示,量化公式为rq(i)=ROUND(r(i)*15),(说明:量化公式中的15等于原始图像灰度级数减1),可得:

rq(0)=ROUND(r(0)*15)=2

rq(1)=ROUND(r(1)*15)=3

rq(2)=ROUND(r(2)*15)=6

rq(3)=ROUND(r(3)*15)=8

rq(4)=ROUND(r(4)*15)=8

rq(5)=ROUND(r(5)*15)=8

rq(6)=ROUND(r(6)*15)=12

rq(7)=ROUND(r(7)*15)=13

rq(8)=ROUND(r(8)*15)=14

rq(9)=ROUND(r(9)*15)=15

rq(10)=ROUND(r(10)*15)=15

rq(11)=ROUND(r(11)*15)=15

rq(12)=ROUND(r(12)*15)=15

rq(13)=ROUND(r(13)*15)=15

rq(14)=ROUND(r(14)*15)=15

rq(15)=ROUND(r(15)*15)=15

因此,原始图像中的灰度级和均化后图像中的灰度级之间的对应关系为:

0->2

1->3

2->6

3->8

4->8

5->8

6->12

7->13

8->14

9->15

10->15

11->15

12->15

13->15

14->15

15->15

将原始图像中对应的灰度值安装上述对应关系替换成相应的灰度值,即可得到均化图像,结果如下:

3 8 13 8

6 12 2 12

14 6 12 8

15 6 12 2

(在电脑上直接做的,仅供参考。ROUND(.)表示四舍五入。)

opencv中,怎么计算彩色图像的直方图calchist

CV_EXPORTS 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 );

参数1表示需要用来计算直方图的源图像序列,因此可以允许有多张大小一样,数据类型相同的图像被用来统计其直方图特征。

  参数2表示的就是使用多少张图像序列中的图像用于计算直方图。

  参数3的出现主要是考虑到输入的每一张图像有可能是多通道的,比如说RGB图就是3通道的,那么从统计意义上来讲,

一张RGB图其实就是3张单通道的图像,而计算直方图时其本质也是针对单张图像进行的。这里虽然我们输入的图像序列images中有很多图片,但是并不是

每一张图片的每一个通道都会被用来计算。所以参数3的功能是指定哪些通道的图像被用来计算(后面的解释都假设图像序列中图像是3通道的,那么有的图像可能

有多个通道都被用来计算,有的图像可能连一个通道都没有被采用),这时参数3里面保存的是通道的序号,那么图像序列images中的第一张图片的通道序号

(假设图像时3通道的)为0,1,2;images中第二张图片的图像序列接着上一次的,为3,4,5,;依次类推即可。

  参数4是mask掩膜操作,即指定每张图片的哪些像素被用于计算直方图,这个掩膜矩阵不能够针对特定图像设定特定的掩膜,因此在这里是一视同仁对待的。

  参数5是保存计算的直方图结果的矩阵,有可能是多维矩阵。

  参数6是需要计算的直方图的维数。

  参数7是所需计算直方图的每一维的大小,即每一维bin的个数。

  参数8是所需计算直方图的每一维的范围,如果参数9的uniform为true,这此时的参数8的大小为2,里面的

元素值表示的是每一维的上下限这两个数字;如果参数9的uniform为false,则此时的参数8的大小为bin的个数,即参数7的值,参数8里面的元

素值需要人为的指定,即每一维的坐标值不一定是均匀的,需要人为指定。

  参数9如果为true的话,则说明所需计算的直方图的每一维按照它的范围和尺寸大小均匀取值;如果为false的话,说明直方图的每一维不是均匀分布取值的,参考参数8的解释。

  参数10如果为false,则表示直方图输出矩阵hist在使用该函数的时候被清0了,如果为true,则表示hist在使用calcHist()函数时没有被清0,计算的结果会累加到前一次保存的值中。

  使用该函数的时候需要注意,如果在默认参数的情况下uniform = true,则此时的ranges大小必须是histSize大小的两倍,并且channels的大小必须等于dims维数。

  从上面可以理解,channels里的值已经指定了使用哪些单通道的图像来计算目标直方图,因此一旦channels的尺寸确定,则对应的直方图的维数也就确定了,所以我们不能使用多张图像来计算一个一维的直方图。

以上内容来自:基础学习笔记之opencv(19):有关图像序列的直方图计算

[cpp] view plain copy print?

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include <iostream>

#include <stdio.h>

using namespace std;

using namespace cv;

/** @函数 main */

int main( int argc, char** argv )

{

Mat src, dst;

/// 装载图像

src = imread( argv[1], 1 );

if( !src.data )

{ return -1; }

/// 分割成3个单通道图像 ( R, G 和 B )

vector<Mat> rgb_planes;

split( src, rgb_planes );

/// 设定bin数目

int histSize = 255;

/// 设定取值范围 ( R,G,B) )

float range[] = { 0, 255 } ;

const float* histRange = { range };

bool uniform = true; bool accumulate = false;

Mat r_hist, g_hist, b_hist;

/// 计算直方图:

calcHist( &rgb_planes[0], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, uniform, accumulate );

calcHist( &rgb_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, uniform, accumulate );

calcHist( &rgb_planes[2], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate );

// 创建直方图画布

int hist_w = 400; int hist_h = 400;

int bin_w = cvRound( (double) hist_w/histSize );

Mat histImage( hist_w, hist_h, CV_8UC3, Scalar( 0,0,0) );

/// 将直方图归一化到范围 [ 0, histImage.rows ]

normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );

normalize(g_hist, g_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );

normalize(b_hist, b_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );

/// 在直方图画布上画出直方图

for( int i = 1; i < histSize; i++ )

{

line( histImage, Point( bin_w*(i-1), hist_h - cvRound(r_hist.at<float>(i-1)) ) ,

Point( bin_w*(i), hist_h - cvRound(r_hist.at<float>(i)) ),

Scalar( 0, 0, 255), 2, 8, 0 );

line( histImage, Point( bin_w*(i-1), hist_h - cvRound(g_hist.at<float>(i-1)) ) ,

Point( bin_w*(i), hist_h - cvRound(g_hist.at<float>(i)) ),

Scalar( 0, 255, 0), 2, 8, 0 );

line( histImage, Point( bin_w*(i-1), hist_h - cvRound(b_hist.at<float>(i-1)) ) ,

Point( bin_w*(i), hist_h - cvRound(b_hist.at<float>(i)) ),

Scalar( 255, 0, 0), 2, 8, 0 );

}

/// 显示直方图

namedWindow("calcHist Demo", CV_WINDOW_AUTOSIZE );

imshow("calcHist Demo", histImage );

waitKey(0);

return 0;

}

急急急!这个流式直方图怎么看?怎么计算转成平均荧光强度的啊?

左边这张图每个峰下面积除以细胞数就是平均荧光强度,在流式细胞仪分析完结果后会出据平均荧光强度的数值,你可以看一下你的原始数据。右边这张图纵坐标的刻度显示的就是平均荧光强度了,你对应纵坐标的刻度看就知道了,只不过你看不出精确的数值。你问的是哪张图?这两张图是什么关系?这些你都没说清楚,别人就不能第一时间提供给你想知道的答案,建议下次把问题描述清楚。

>>>>全文在线阅读<<<<

标签: 直方图 颜色

相关阅读