matlab画直方图,已经x的区间(25,30)(30,35),(35,40),(40,45)

matlab画直方图,已经x的区间(25,30)(30,35),(35,40),(40,45),第1张

正常应该是这样的

x=275:5:425;

y=[2 3 3 4];

bar(x,y)

图像如下:

但是这样x轴的坐标只显示区间的百分之八十,如果你是需要图像的x轴上标有区间的值,就需要更改x轴的属性:

x=[1,2,3,4];y=[2,3,3,4];

bar(x,y)

set(gca,'xticklabel',{'(25,30)' '(30,35)' '(35,40)' '(40,45)'})

图像如下:

可以根据需要来选择。

单通道图像的直方图(C/C++源代码)
计算并绘制单通道图像的直方图。在MATLAB中绘制直方图是一件非常简单的事情,可是到了C环境下,竟然变成了一个问题。各种实现方法都有,而且要自己动手重新编程。幸好有了OPENCV。下面的代码要求OPENCV40的支持,并在VC6中编译通过。
转自阿须数码
//
// 对单通道图像做直方图
//
#include "cvh"
#include "highguih"
#include <stdioh>
#include <ctypeh>
int main( int argc, char argv )
{
IplImage src = 0;
IplImage histimg = 0;
CvHistogram hist = 0;
int hdims = 50; // 划分HIST的个数,越高越精确
float hranges_arr[] = {0,255};
float hranges = hranges_arr;
int bin_w;
float max_val;
int i;
if( argc != 2 || (src=cvLoadImage(argv[1], 0)) == NULL) // force to gray image
return -1;
cvNamedWindow( "Histogram", 1 );
hist = cvCreateHist( 1, &hdims, CV_HIST_ARRAY, &hranges, 1 ); // 计算直方图
histimg = cvCreateImage( cvSize(320,200), 8, 3 );
cvZero( histimg );
cvCalcHist( &src, hist, 0, 0 ); // 计算直方图
cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 ); // 只找最大值
cvConvertScale( hist->bins, hist->bins, max_val 255 / max_val : 0, 0 ); // 缩放 bin 到区间 [0,255]
cvZero( histimg );
bin_w = histimg->width / hdims; // hdims: 条的个数,则 bin_w 为条的宽度
// 画直方图
for( i = 0; i < hdims; i++ )
{
double val = ( cvGetReal1D(hist->bins,i)histimg->height/255 );
CvScalar color = CV_RGB(255,255,0); //(hsv2rgb(i180f/hdims);
cvRectangle( histimg, cvPoint(ibin_w,histimg->height),
cvPoint((i+1)bin_w,(int)(histimg->height - val)),
color, 1, 8, 0 );
}
cvShowImage( "Histogram", histimg );
cvWaitKey(0);
cvDestroyWindow("Histogram");
cvReleaseImage( &src );
cvReleaseImage( &histimg );
cvReleaseHist ( &hist );
return 0;
}

图像的直方图用来表征该图像像素值的分布情况。用一定数目的小区间(bin)来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目。

图像直方图图形化显示不同的像素值在不同的强度值上的出现频率,对于灰度图像来说强度范围为[0~255]之间,对于RGB的彩色图像可以独立显示三种颜色的图像直方图。

drawHist()用于展示图像的直方图,并把它转换成bitmap。

如果对CalcHistogram感兴趣,可以查看 cv4j 的具体实现。

直方图均衡化(histogram equalization)是一种借助直方图变换实现灰度映射从而达到图像增强目的的方法。
直方图均衡化通常是对图像灰度值进行归一化的一个非常好的方法,并且可以增强图像的对比度。

基本思想:把原始图的直方图变换成为均匀分布的形式,这样,就增加了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。

同样,如果对EqualHist感兴趣,可以查看 cv4j 的具体实现。

图像是由像素构成的,然而直方图能够反映像素的分布情况,可以作为是图像一个很重要的特征。在实际开发中,图像直方图在特征提取、图像匹配等方面都有很好的应用。除此之外,直方图还能做图像的相似度匹配。

直方图均衡化则用于增强,利于人的视觉效果或便于机器识别。

CalcHistogram 和 EqualHist 是 cv4j 中直方图相关 *** 作的类。

cv4j 是 gloomyfish 和我一起开发的图像处理库,纯java实现,目前还处于早期的版本。
上周末我们开始做直方图的相关 *** 作,预计下周能做完这个模块。

另外,在Google I/O之后,我们第一时间便更新了cv4j中的rxcv4j模块。该模块顾名思义是对cv4j使用RxJava进行封装,我们将该模块用 Kotlin 重写,也算是赶了一回时髦:)。

该系列先前的文章:
模拟油画和铅笔画的滤镜效果
二值图像分析之轮廓分析
基于边缘保留滤波实现人脸磨皮的算法
二值图像分析:案例实战(文本分离+硬币计数)
Java实现高斯模糊和图像的空间卷积
Java实现滤镜的高级玩法
Java实现的滤镜效果


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12994402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存