熱線電話:13121318867

登錄
首頁大數據時代數字圖像處理中的灰度直方圖是是什么?
數字圖像處理中的灰度直方圖是是什么?
2020-07-20
收藏

直方圖你一定知道,那么灰度直方圖呢?你了解嗎?灰度直方圖,顧名思義,就是先統計出來一幅圖像中每一個像素出現的次數,之后再把每一個像素出現的次數除以總的像素個數,得到的結果就是這個像素的出現頻率,最后再將像素和該像素的出現頻率用圖表示出來,就是灰度直方圖。先簡單通俗的介紹了灰度直方圖,下面跟隨小編一起詳細了解一下吧。

一、灰度直方圖概念

灰度直方圖,是數字圖像處理中,一種計算代價非很小,但是非常有用的工具,它概括出了一幅圖像的灰度級信息。

灰度直方圖是圖像灰度級的函數,通常用來描述每個灰度級在圖像矩陣中的像素個數或者占有率?;叶?a href='/map/zhifangtu/' style='color:#000;font-size:inherit;'>直方圖橫坐標是灰度級,縱坐標表示圖像中該灰度級出現的個數(頻率)。

一維直方圖的結構:

可以將高維直方圖理解為圖像在每個維度上灰度級分布的直方圖。最為常見的是二維直方圖,二維中對應每個像素統計個變量。

二·、灰度直方圖的性質:

1、灰度直方圖只反映圖像的灰度分布情況,不能反映圖像像素的位置,也就是丟失了像素的位置信息

2、一幅圖像對應的灰度直方圖是唯一的,但是不同的圖像卻能夠對應相同的直方圖

3、將一幅圖像分為多個區域,多個區域的直方圖之和也就是原圖像的直方圖

三、創建灰度直方圖


<span style="font-size:18px;">#include <iostream>
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
using namespace std;
 
IplImage *DrawHistogram(CvHistogram*hist, float scaleX = 1, float scaleY = 1){  // 畫直方圖
	float histMax = 0;
	cvGetMinMaxHistValue(hist, 0 , &histMax, 0, 0);  // 取得直方圖中的最值
	IplImage *imgHist = cvCreateImage(cvSize(256 * scaleX, 64*scaleY), 8, 1);
	cvZero(imgHist); //// 清空隨機值
	for(int i = 0; i < 255; i++)
	{
		float histValue = cvQueryHistValue_1D(hist, i); // 取得直方圖中的i值
		float nextValue = cvQueryHistValue_1D(hist, i+1);
		int numPt = 5;
		CvPoint pt[5];
		pt[0] = cvPoint(i*scaleX, 64*scaleY);
		pt[1] = cvPoint((i+1)*scaleX, 64*scaleY);
		pt[2] = cvPoint((i+1)*scaleX, (1 -(nextValue/histMax))* 64 * scaleY);
		pt[3] = cvPoint((i+1)*scaleX, (1 -(histValue/histMax))* 64 * scaleY);
		pt[4] = cvPoint(i*scaleX, 64*scaleY);
		cvFillConvexPoly(imgHist, pt, numPt, cvScalarAll(255));
	}
	return imgHist;
 
 
}
 
 
int main()
{
	IplImage *img = cvLoadImage("F:\\tongtong.jpg",1);
	if(!img){
		cout << "No data img" << endl;
	}
	int dims = 1;
	int sizes = 256;
	float range[] = {0,255};
	float*ranges[]={range};
	CvHistogram *hist = cvCreateHist(dims, &sizes, CV_HIST_ARRAY, ranges, 1);
	cvClearHist(hist);	        //清除直方圖里面的隨機值 
	IplImage *imgBlue = cvCreateImage(cvGetSize(img), 8, 1);
	IplImage *imgGreen = cvCreateImage(cvGetSize(img), 8, 1);
	IplImage *imgRed = cvCreateImage(cvGetSize(img), 8, 1);
	cvSplit(img, imgBlue, imgGreen, imgRed, NULL);   //將多通道圖像分解
 
	cvCalcHist(&imgBlue, hist, 0, 0);    // 計算圖像的直方圖
	IplImage *histBlue = DrawHistogram(hist);   // 將直方圖中的數據畫出來
	cvClearHist(hist);
 
	cvCalcHist(&imgGreen, hist, 0, 0);  
	IplImage *histGreen = DrawHistogram(hist);
	cvClearHist(hist);
	cvCalcHist(&imgRed, hist, 0, 0);
	IplImage *histRed = DrawHistogram(hist);
	cvClearHist(hist);
 
	cvNamedWindow("show",0);
	cvNamedWindow("B", 0);
	cvNamedWindow("G", 0);
	cvNamedWindow("R", 0);
	cvShowImage("show",img);
	cvShowImage("B",histBlue);
	cvShowImage("G",histGreen);
	cvShowImage("R", histRed);
	cvWaitKey(0);
	cvReleaseImage(&img);
	cvDestroyWindow("show");
	cvReleaseImage(&histBlue);
	cvDestroyWindow("B");
	cvReleaseImage(&histGreen);
	cvDestroyWindow("G");
	cvReleaseImage(&histRed);
	cvDestroyWindow("R");
	return 0;
	
}</span>


數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢