图像的直方图统计实验报告
图像直方图实验报告
图像直方图实验报告实验目的本实验旨在通过使用Python编程语言对图像直方图进行分析和可视化,加深对图像亮度分布的理解,并通过实验结果来探索不同图像的特点和相似性。
实验步骤1. 导入必要的库在开始实验之前,首先需要导入所需的Python库,包括numpy、matplotlib.pyplot和cv2。
可以使用以下代码导入这些库:import numpy as npimport matplotlib.pyplot as pltimport cv22. 读取图像数据选择一张感兴趣的图像作为实验对象,并使用cv2库中的imread()函数读取图像数据。
例如,可以使用以下代码读取名为image.jpg的图像:image = cv2.imread('image.jpg', 0)3. 计算图像直方图使用numpy库中的histogram()函数计算图像的直方图。
直方图是一个表示图像亮度级别频率分布的数组。
可以使用以下代码计算直方图:histogram = np.histogram(image.flatten(), bins=256, range=[0, 256])上述代码将返回一个包含图像直方图数据的数组。
4. 可视化直方图使用matplotlib.pyplot库中的bar()函数将图像直方图可视化。
可以使用以下代码绘制直方图:plt.figure()plt.title('Image Histogram')plt.xlabel('Bins')plt.ylabel('Frequency')plt.bar(histogram[1][:-1], histogram[0], width=1, color='gray')plt.show()上述代码将绘制一个表示图像亮度级别频率分布的直方图。
5. 结果分析通过观察直方图,可以分析图像的亮度特性和分布情况。
图像直方图均衡实验
/*初始化直方图背景为白色*/CvScalar white;white.val[0]=255;for(int i=0;i<dst->height;i++){for(int j=0;j<dst->width;j++){cvSet2D(dst, i, j, white);}}/*绘制横竖坐标*/CvScalar black;black.val[0] = 0;for(int i=0;i<280;i++){cvSet2D(dst, 280, i+10, black);}for(int i=0;i<280;i++){cvSet2D(dst, i+10, 20, black);}/*绘制直方图*/for(int i=0;i<256;i++){int high = count[i]*256/max;int x=20+i;for(int j=0;j<high;j++){int y=280-j;cvSet2D(dst, y, x, black);}}return dst;}实验结果如下图所示:2.通过计算归一化直方图,设计算法实现直方图均衡化处理。
核心代码如下:IplImage* Equalization(IplImage *src){IplImage* dst = cvCreateImage(cvGetSize(src),3.在灰度图像直方图均衡处理的基础上实现彩色直方图均衡处理。
核心代码如下:IplImage* ColorEqualization(IplImage *src){IplImage *dst = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3);IplImage *pImageChannel[3] = {NULL};int i;for (i=0; i<3; i++) {pImageChannel[i] = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);}cvSplit(src, pImageChannel[0], pImageChannel[1], pImageChannel[2], NULL);for (i=0; i<src->nChannels; i++) {pImageChannel[i] = Equalization(pImageChannel[i]);}/*三通道合并*/cvMerge(pImageChannel[0], pImageChannel[1], pImageChannel[2], NULL, dst);return dst;}实验结果如下图所示:。
实验-直方图统计及亮度调整概要
实验 2.直方图统计及亮度调整一、实验目的了解并掌握直方图统计方法以及分段线性拉伸、直方图均衡等亮度调整算法, 通过观察对这些运算建立感性认识。
二、实验内容1. 观察各类图像的直方图;2. 操作 LUT 灰度对照表,进行分段线性拉伸;3. 采用直方图均衡方法对低对比度的图像进行对比度增强。
三、基本原理1.直方图的定义图象的灰度直方图是一个函数, 表示数字图象中每一灰度级与该灰度级出现的频数 (即具有这一灰度级的象素数目间的对应关系:P b N b M(( =M 为一幅图象所包含的象素总数; N (b 为图象中灰度值为 b 的象素总数。
通常,以灰度值 b 为横坐标, N (b 为纵坐标。
直方图是图象中象素灰度值的一阶概率分布密度的一种近似。
2.对比度增强对比度增强又称为点运算,逐点改变输入图象的每一象素的灰度,而各象素的位置不改变, 一般用来拓宽图象的灰度范围。
(1灰度变换法(LUT 对照典型的对比度拉伸灰度变换关系如图 1所示,其对应关系如下:gf f a f ag a f b f b g b f L ab=≤< -+≤< -+≤<⎧⎨⎪⎩⎪αβγ((式中, f 、 g 分别表示输入及输出图象, α、β、γ为折线段的斜率, a 、 b 决定低、中、高灰度级的范围。
选择不同的α、β、γ、 a、 b 、 g a 及 g b 数值,可得到各种各样的灰度拉伸效果。
灰度变换前后的灰度变化范围是不变的, 对一部分灰度区域的扩张 (感兴趣区都是以其它区域的压缩为代价的。
图 1. 典型的对比度拉伸灰度变换关系可见,输出和输入图象之间各点的灰度是按照一定的映射关系相联系的,这种映射关系在计算机中则是通过一个查照表(look-up table,即 LUT 实现的。
通过 LUT 对照改变了图象中不同灰度特性趋于的对比度或反差(contrast ,达到改善视觉效果的目的。
(2 直方图均衡直方图均衡(histogram equalization就是通过点运算使输入图像的灰度分布较为均匀, 使图像具有较好的视觉效果。
图形图像报告一直方图处理
昆明理工大学信息工程与自动化学院学生实验报告( 2012 —2013 学年第二学期)课程名称:图形图像基础开课实验室:信自楼444 2013 年 5月 15日一、实验目的及内容目的:掌握和熟悉Matlab编程环境及语言;掌握直方图统计的算法和用途。
内容:1.在Matlab中载入一副灰度图像,统计显示该图像的直方图。
2.对图像进行直方图均衡化处理,显示处理后的图像及直方图。
二、要求1.描述直方图的概念并解释直方图均衡化原理。
2.程序结构清晰,运行结果正确。
3.描述上述程序的设计、实现和结果,并对结果进行分析。
三、实验原理1.直方图的概念灰度直方图反映的是一幅图像中个灰度级像素出现的频率之间的关系。
以灰度级为横坐标,纵坐标为灰度级的频率,绘制频率和灰度级的关系图就是灰度直方图。
直方图的横轴从左到右代表照片从黑(暗部)到白(亮度)的像素数量,其左边最暗处的Level值为0,而右边最亮处的Level值为255。
直方图的垂直轴方向代表了在给定的Level值下的像素的数目。
频率的计算公式为:i v =n n i在以上公式中:i n 是图像中灰度级为i 的像素数,n 为图像的总像素数。
灰度直方图是图像的重要特征之一,它反应了图像灰度分布的情况。
2.直方图均衡化原理直方图均衡化是通过对原图进行某种变化使得原图像的灰度直方图修正为一种均匀的直方图的一种方法。
灰度直方图均衡化,简单地说,就是把直方图的每一个灰度级进行归一化处理,计算出每一个灰度的累积分布,得到一个映射的灰度映射表,然后根据相应的灰度值来修正原图的每个像素。
四、实验环境Windows 7、MATLAB 7.11.0(R2010b)五、实验内容(包含过程及解析)1. 熟悉Matlab 编程环境及语言1.在Matlab 中载入一副灰度图像,统计显示该图像的直方图。
(1)设置工作空间为:D:\softid\matlab\workspace ,将pollen.tif 放进工作空间。
图像的直方图实验心得体会
图像的直方图实验心得体会在这次实验中,我学习了图像的直方图并对其进行了实验。
以下是我的心得体会。
首先,直方图是用于显示灰度图像中每个灰度级别的像素的数量的直方图。
通过直方图,我们可以快速了解图像的灰度分布情况,从而更好地理解图像的特征和性质。
在这次实验中,我通过编程实现了直方图的绘制。
通过绘制直方图,我能够直观地看到图像中不同灰度级别的像素的分布情况。
在实验过程中,我使用了Python的matplotlib库来绘制直方图。
我将图像转换为灰度图像,并统计了每个灰度级别的像素的数量。
然后,我使用matplotlib库的hist函数绘制了直方图。
通过调整图像的亮度和对比度,我观察到了直方图的变化。
我发现,当图像的亮度和对比度增加时,直方图的峰值变得更加集中,表示图像中存在更多的像素值。
在绘制直方图的过程中,我还发现直方图可以用于图像增强。
通过调整图像的直方图,我们可以改变图像的亮度和对比度,从而使图像更加清晰。
例如,通过拉伸直方图,我可以增强图像的对比度,使图像中的细节更加明显。
通过直方图均衡化,我可以使图像的亮度分布更加均匀,提高图像的可视化效果。
此外,在实验中,我还学习了直方图匹配技术。
通过直方图匹配,我们可以将一张图像的直方图转换为另一张图像的直方图,从而达到两张图像具有相似的亮度和对比度的效果。
这种技术在图像处理和计算机视觉领域中有着广泛的应用。
通过这次实验,我了解到了直方图匹配的原理和方法,并成功实现了直方图匹配的代码。
总的来说,这次实验让我更好地理解了图像的直方图和直方图的应用。
通过实际操作和编程实现,我更加深入地了解了直方图的绘制和分析方法。
我也学会了如何使用直方图来调整图像的亮度和对比度,并实现了直方图匹配技术。
这次实验为我日后进一步研究图像处理和计算机视觉提供了基础和启示。
我相信,通过不断实践和学习,我可以更加深入地掌握图像处理和计算机视觉的知识,为解决实际问题提供更好的方案和方法。
数字图像直方图统计报告
一、学习情况
灰度直方图均衡化进行数字图像处理的基本原理
01
直方图均衡化:利用这一特性对图像中像素个数多的灰度 级进行展宽,而对图像中像素个数少的灰度进行压缩,从
而提高了对比度和灰度色调的变化,使图像更加清晰。
实现步骤: (1) 根据输入的灰度图像计算其原始直方图 (2) 对输入的原始直方图进行累加,计算其cdf (3) 使用累计分布函数的线性插值计算新的灰度值
一、学习情况
Matlab仿真
02
Imhist():直接显示图像的灰度直方图
均衡化: (1) 根据输入的灰度图像计算其原始直方图 (2) 对输入的原始直方图进行累加,计算其cdf (3) 使用累计分布函数的线性插值计算新的灰度值
二、已完成的工作及仿
真结果
二、已完成的工作及仿真结果 1 MATLAB仿真
阈值为100 200
阈值为120 200
阈值为140 180
阈值为150 170
由思考题得出的结论
阈值选择在波谷时,图片黑白分化更加明 显,对比度有所增强,当阈值靠近波峰时, 丢失信息过多,图片失真较为严重。
仿真1 MATLAB仿真
2 修改程序课后题的完成结果
双峰阈值分割法
在一些简单的图像中,物体的灰度分布比较有 规律,背景与各个目标在图像的直方图各自形 成一个波峰(区域与波峰一一对应),每两个 波峰之间会形成一个波谷,选择此波谷作为阈 值。
阈值为60 200
阈值为80 200
数字图像直方图均衡化增强实验 中期汇报
组员:张三
一、学习情况
一、学习情况
灰度直方图均衡化进行数字图像处理的基本原理
01
灰度直方图:横坐标是灰度级别,纵坐标是图像中该灰 度值的出现频率,是一个统计结果。
实验1 图像直方图分析
实验1 图像直方图分析模式识别与智能系统王衍平 20100430031 实验目的本试验通过MATLAB编程,获取一幅RGB图像的灰度直方图信息,并根据灰度直方图获得图像中的像素亮度的分布情况。
2 实验步骤(1)使用imread函数读取一幅RGB图像,并输出显示该图像;(2)使用size函数获取该图像的大小,然后分离三个颜色通道;(3)分别输出显示R、G、B三个颜色通道的图像;(4)分别绘制R、G、B三个颜色通道的灰度直方图;(5)绘制RGB三个颜色通道的灰度直方图于一幅图像中。
3 MATLAB程序代码I=imread('D:\数字图像处理实验\001.bmp');% 若果不是RGB图像,报错if(size(I,3)~=3)error('rgbhist:numberOfSamples','Input image must be RGB.')endfigure(1),imshow(I);title('原RGB图像');S=size(I); % Size of array file.H=reshape(I,S(1)*S(2),S(3)); % 将每个颜色通道变为一列H=double(H); % Convert to double precision.nHist=2^8-1;figure(2),imshow(I(:,:,1)); % 显示R通道上的图像title('R通道上的图像');figure(3),imshow(I(:,:,2)); % 显示G通道上的图像title('G通道上的图像');figure(4),imshow(I(:,:,3)); % 显示B通道上的图像title('B通道上的图像');figure(5),imhist(I(:,:,1),nHist); % 绘制图像R通道上的灰度直方图title('R通道上的灰度直方图');figure(6),imhist(I(:,:,2),nHist); % 绘制图像R通道上的灰度直方图title('G通道上的灰度直方图');figure(7),imhist(I(:,:,3),nHist); % 绘制图像R通道上的灰度直方图title('B通道上的灰度直方图');figure(8)[N,X]=hist(H,[0:1:255]); % 绘制RGB图像的R、G、B通道上的灰度直方图bar(X,N(:,[3 2 1]));xlim([0 255]) % X limits.hold onplot(X,N(:,[3 2 1])); % 上边界轮廓title('RGB图像的R、G、B通道上的灰度直方图');hold off4 实验结果与分析通过观察R、G、B三个颜色通道的灰度直方图可知,原图像的像素灰度值大部分集中在亮区,一般在摄影中曝光太弱将会导致这种结果。
数字图像实验 图像直方图分析1234
试验三:图像直方图分析一·实验目的1.掌握VC++6.0图像编程的基本操作2. 应用VC++6.0编程绘制灰度直方图。
二·实验内容1.用VC++6.0绘制灰度直方图;2. 对图像进行直方图分析。
三·实验步骤(1)启动VC++6.0,打开Dip工程。
(2)将Pointpro.h、Pointpro.cpp文件及Areapro.h、Areapro.cpp文件拷贝到当前工程目录文件里面。
(3)在Fileview-->Dipfiles→右键→Setting→Link→添加Pointpro.h、Pointpro.cpp 文件及Areapro.h、Areapro.cpp文件。
(4)在菜单栏→insert→resouce→dialog→new,在对话框模版的非控制区点击鼠标右键,在弹出的对话框中选properties,设置为ID:IDD_DLG_Intensity,C标题:Histogram,关闭属性对话框,回到“建立类向导”(MFC classwizard),在弹出的对话框中选创建新类CDlgIntensity后确定。
并且在FileView中修改DlgIntensity.cpp和DlgIntensity.h相应的代码;(5)在弹出的对话框中,添加如下的按钮等控件:例如右键单击上面最大的静态文本,在弹出的对话框中选“属性”,在属性对话框中添加如下内容:(6)在ResourceView栏中→Menu→选IDR_DIPTYPE ,如图在View菜单栏下空的一栏中,右键鼠标,在弹出的对话框中选属性properties,在弹出的对话框中,设置:ID:ID_VIEW_HIST,标题为Histogram,在建立的类向导中选类为CDlgIntensity,确定。
(7)在StdAfx.h中添加#include<math.h>(8)在DipView.h中//{{AFX_MSG(CDipView)下添加afx_msg void OnViewHist();afx_msg void OnUpdateViewHist(CCmdUI* pCmdUI); (9)DipView.cpp添加#include "PointPro.h"和#include "DlgIntensity.h",在BEGIN_MESSAGE_MAP(CDipView, CScrollView)处添加:ON_COMMAND(ID_VIEW_HIST, OnViewHist)ON_UPDATE_COMMAND_UI(ID_VIEW_HIST, OnUpdateViewHist) 在// CDipView message handlers下面添加:void CDipView::OnViewHist(){CDipDoc* pDoc = GetDocument();ASSERT_V ALID(pDoc);//判断当前是否有图像对象if( pDoc->m_pDibObject == NULL ) return;//在点处理CPointPro类中创建用来绘制直方图的数据CPointPro PointOperation( pDoc->m_pDibObject );int *pHistogram = PointOperation.GetHistogram();//生成一个对话框CHistDlg类的实例CDlgIntensity HistDlg;//将绘制直方图的数据传递给CHistDlg对话框类的公有成员变量m_pnHistogramif( pHistogram != NULL ){//设置直方图数据指针HistDlg.m_pnHistogram = pHistogram;//设置当前像素值为0的像素数HistDlg.m_nCurrentPiexsNum = pHistogram[0];//设置是否为256级灰度图像HistDlg.m_bIsGray256 = PointOperation.IsGray256();}//显示对话框if ( HistDlg.DoModal() != IDOK)return;delete [] pHistogram;}void CDipView::OnUpdateViewHist(CCmdUI* pCmdUI){CDipDoc* pDoc = GetDocument();ASSERT_V ALID(pDoc);pCmdUI->Enable( pDoc->m_pDibObject->GetNumBits() >= 8);}(10)在DipDoc.h中添加:protected:long m_lHeight;long m_lWidth;(11)在DipDoc.cpp中添加菜单命令:#include "AreaPro.h",在CDipDoc::CDipDoc()下面添加{m_pDibObject = NULL;m_bImageLoaded = FALSE;// TODO: add one-time construction code herem_lHeight = 0;m_lWidth = 0;}在最下面添加:void CDipDoc::OnFileSaveAs(){// TODO: Add your command handler code herestatic int nIndex = 1;CFileDialog DialogSaveAs( FALSE, NULL, m_pDibObject->GetImageName(),OFN_HIDEREADONLY, szFilter );DialogSaveAs.m_ofn.nFilterIndex = (DWORD) nIndex;if( DialogSaveAs.DoModal() == IDOK ){CMainFrame *pMainFrame = ( CMainFrame * )AfxGetMainWnd();CChildFrame *pChildFrame = ( CChildFrame * )pMainFrame->MDIGetActive();CDipView *pDipView = ( CDipView * )pChildFrame->GetActiveView();nIndex = (int) DialogSaveAs.m_ofn.nFilterIndex;if( nIndex == 5 ){if( m_pDibObject->GetNumBits() != 24 ){AfxMessageBox("必须是24位真彩色图像才能存为JPEG格式!");return;}}if( m_pDibObject != NULL ){CString strPathName = DialogSaveAs.GetPathName();int nFindIndex = strPathName.Find(".");if( nFindIndex != -1)strPathName = strPathName.Left( nFindIndex );strPathName += CDibObject::szExtensions[ nIndex - 1 ];//m_pDibObject->ProcessImageHeader();//m_pDibObject->ProcessPalette();m_pDibObject->Save( strPathName );CString strFileName = DialogSaveAs.GetFileName();nFindIndex = strFileName.Find(".");if ( nFindIndex != -1 )strFileName = strFileName.Left( nFindIndex );strFileName += CDibObject::szExtensions[ nIndex - 1 ];pChildFrame->SetWindowText( strFileName );SetPathName( strPathName );if( nIndex == 5 ){m_pDibObject->Load( strPathName );pDipView->InvalidateRect( NULL, FALSE );pDipView->UpdateWindow();}}}}(12)在ChildFrm.h中添加public:CChildFrame();int m_nWidth, m_nHeight;(13)在ChildFrm.cpp中添加CChildFrame::CChildFrame(){m_nWidth = 300;m_nHeight = 150;}在BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)添加:{// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT cscs.cx = m_nWidth;cs.cy = m_nHeight;if( !CMDIChildWnd::PreCreateWindow(cs) ) return FALSE;return TRUE;}一、实验结果二、实验心得及体会通过做这次实验,使我又学到了关于图像直方图的知识,进一步掌握了图像编程的基本操作:会应用VC++6.0编程绘制灰度直方图。
实验-数字图像的直方图统计
实验二数字图像的直方图统计一、实验目的1.了解对灰度图像进行直方图统计的基本原理;2.掌握用VC编程实现直方图统计的方法;3.在微机上调试程序;5. 分析数字图像直方图的特点。
二、实验原理图像的直方图图像的(灰度统计)直方图是一个一维的离散函数。
它的定义为:设s k为图像f(x,y)的第k级灰度值,n k是f(x,y)中具有灰度值s k的象素的个数,n是图像象素总数,则:p s(s k)= n k/n k=0,1, ,L-1称为图像f(x,y)的直方图。
这里p s(s k)代表原始图中第k个灰度级的出现概率。
以n k为自变量,以p s(s k)为函数,得到的曲线就是图像的直方图,在实际中常常直接将对第k个灰度级的统计值n k作为图像的直方图。
它提供了原图灰度值的分布情况,也可以说给出了一幅图所有灰度值的整体描述。
对灰度图像进行直方图统计的程序流程图如图2-1所示。
图2-1 灰度图像直方图统计流程三、实验前准备1.预习本实验中关于数字图像直方图统计的有关内容;2. 预习VC中添加对话框的步骤和方法;3.了解本实验的目的和实验内容。
四、实验内容1.在实验一的基础上读入并显示一幅数字图像;2.编写对灰度图像进行直方图统计的程序,并将结果显示在屏幕上。
五、实验报告要求1.总结对灰度图像进行直方图统计的过程,比较不同的图像其直方图特性;2.对实验结果进行分析。
六、参考步骤和程序在实验一的基础上,进行如下操作:1、点击ResourceView,右键点击Dialog,选Insert Dialog 在属性对话框中将ID改为ID_HIST,对话框名称改为“直方图”2、在工具栏中点“插入”-“新建类”,输入类名,并选Base Class为CDialog,Dialog ID为ID_HIST。
这样就将对话框和类联系起来了,在该对话框中拖入一Edit控件,将其ID 设为IDC_HISTSHOW;3、快捷键“Ctrl+W”,出现MFC ClassWizard对话框,在Messages栏中分别选WM_INITDIALOG和WM_Paint,再点击“Add Function”,即将对话框初始化和画图函数加入对话框类之中。
统计图像直方图及图像均衡化
数字图像处理实验报告一、实验内容:1、统计图像直方图2、直方图的均衡化二、实验目的:1、学会在VC环境下使用opencv,能学会基本的图像导入与显示2、学会加载图像及图像各像素点的统计3、理解并掌握利用直方图均衡化图像的过程,并用程序加以实现三、实验代码:#include "cv.h"#include "highgui.h"#include<stdio.h>#include<math.h>int main( int argc, char** argv ){IplImage* plmg; //声明IplImage指针int height,width,step,channels;uchar *data;int i,j,k,r,count=0;int r0[256]={0};float pr[256]={0},sk[256]={0};//载入图像plmg = cvLoadImage("Tulips.jpg", 1);{cvNamedWindow( "Image", 1 );//创建窗口cvShowImage( "Image", plmg );//显示图像//统计图像各参数并赋值height=plmg->height;width=plmg->width;step=plmg->widthStep;channels=plmg->nChannels;data=(uchar *)plmg->imageData;printf("Processing a %d*%d with %d channels\n",height,width,channels);//反转图像/* for(i=0;i<height;i++)for(j=0;j<width;j++)for(k=0;k<channels;k++)data[i*step+j*channels+k]=255-data[i*step+j*channels+k];cvNamedWindow( "Image1", 1 );//创建窗口cvShowImage( "Image1", plmg );//显示图像*/for(i=0;i<height;i++) //统计直方图for(j=0;j<width;j++)for(k=0;k<channels;k++)//for(r=0;r<256;r++)r0[data[i*step+j*channels+k]]++;for(r=0;r<256;r++)count=count+r0[r];for(r=0;r<256;r++)printf("pixel %d is %d\n",r,r0[r]);printf("all pixels=%d\n",count);for(r=0;r<256;r++){pr[r]=r0[r]/(float)count; //像素点归一化printf("pixel %d 的个数及归一化:%d %f\n",r,r0[r],pr[r]);}sk[0]=255*pr[0]; //均衡化像素函数for(r=1;r<256;r++)sk[r]=sk[r-1]+pr[r]*255;for(r=0;r<256;r++){printf("pixel %d befor equilibria is %d ,after is %f \n",r,r0[r],sk[r]);}//映射到原图像,即像素值强制修改为均衡后的值for(i=0;i<height;i++)for(j=0;j<width;j++)for(k=0;k<channels;k++)data[i*step+j*channels+k]=sk[data[i*step+j*channels+k]];cvNamedWindow( "Image1", 1 );//创建窗口cvShowImage( "Image1", plmg );//显示图像*/cvWaitKey(0); //等待按键cvDestroyWindow( "Image" );//销毁窗口cvReleaseImage( &plmg ); //释放图像return 0;}return -1;}四、实验结果:五、实验心得:1、每建立一个将要使用opencv的VC Project ,都需要给它指定需要的lib文件2、需要加载的图像必须和所建工程的程序文件在同一个目录下3、对图像操作时,必须先把定义的图像参数赋值,否则将不能对图像进行修改4、初步掌握了opencv在VC环境下的运行与基本的opencv语句5、图像均衡化时,要注意归一时是除以所有像素点的总数,均衡时概率依次累加后乘以的是最大灰度级,同时要注意所用数组整型和浮点型的转换6、实验误区:各灰度级经过像素点的计算得到均衡化的结果是灰度数,而不再是像素点的个数7、数组赋值需用{}。
数字图像处理-直方图-实验报告
实验三直方图一、实验目的掌握基本的图象增强方法,观察图象增强的效果,加深对灰度直方图及直方图均衡化的理解,掌握直方图均衡化方法。
二、实验内容将一张彩色图片转换成灰色图片,画灰度直方图和均衡化后的直方图,并将灰度图和均衡化后的图片对比。
三、实验原理灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其所出现的频度。
通常,灰度直方图的横坐标表示灰度值,纵坐标为像素个数,也可以采用某一灰度值的像素数占全图像素数的百分比作为纵坐标。
直方图均衡方法的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并。
从而达到清晰图像的目的。
四、实验程序1.函数功能,画出图像的直方图,并对图像进行直方图均衡2.直接读图像football.jpg,读到I中3.graydis是原始直方图各灰度级像素个数4.原始直方图graydispro,利用原始直方图计算原始累计直方图graydispro5.t[]计算和原始灰度对应的新的灰度t[],建立映射关系,t坐标代表原始的灰度,t[]代表对应原始坐标的新坐标6.new_graydis是统计新直方图各灰度级像素个数7.计算新的灰度直方图new_graydispro,利用新的直方图计算新的累计直方图new_graydispro8.计算直方图均衡后的新图new_J程序如下:I=imread('football.jpg'); %读入图片J=rgb2gray(I); %将彩色图片转换为灰度图Imshow(J);graydis=zeros(1,256); %设置矩阵大小graydispro=zeros(1,256);new_graydis=zeros(1,256);new_graydispro=zeros(1,256);[h w]=size(J);new_J=zeros(h,w);%计算原始直方图各灰度级像素个数graydisfor x=1:hfor y=1:wgraydis(1,J(x,y))=graydis(1,J(x,y))+1;endend%计算原始直方图graydisprograydispro=graydis./sum(graydis);subplot(1,2,1);plot(graydispro);title('灰度直方图');xlabel('灰度值');ylabel('像素的概率密度');%计算原始累计直方图for i=2:256graydispro(1,i)=graydispro(1,i)+graydispro(1,i-1);end%计算和原始灰度对应的新的灰度t[],建立映射关系for i=1:256t(1,i)=floor(254*graydispro(1,i)+0.5);end%统计新直方图各灰度级像素个数new_graydisfor i=1:256new_graydis(1,t(1,i)+1)=new_graydis(1,t(1,i)+1)+graydis(1,i); end%计算新的灰度直方图new_graydispronew_graydispro=new_graydis./sum(new_graydis);subplot(1,2,2);plot(new_graydispro);title('均衡化后的灰度直方图');xlabel('灰度值');ylabel('像素的概率密度');%计算直方图均衡后的新图new_J for x=1:hfor y=1:wnew_J(x,y)=t(1,J(x,y));endendfigure,imshow(J,[]);title('原图');figure,imshow(new_J,[]);title('直方图均衡化后的图');。
图像直方图实验报告
图像直方图实验报告图像直方图实验报告一、引言图像直方图是一种用于分析和描述图像亮度分布的工具。
通过统计图像中不同亮度级别的像素数量,我们可以获得图像的亮度分布情况,从而更好地理解图像的特征和内容。
本实验旨在通过对不同图像的直方图分析,探索图像直方图在图像处理中的应用。
二、实验方法1. 实验材料本实验使用了三张不同类型的图像:一张自然风景图像、一张人物肖像图像和一张抽象艺术图像。
2. 实验步骤(1)打开图像处理软件,并导入所选图像。
(2)选择图像直方图功能,并生成图像的直方图。
(3)观察直方图的形状和分布情况,并记录下来。
(4)根据观察结果,分析图像的亮度特征和内容特点。
三、实验结果与分析1. 自然风景图像的直方图自然风景图像的直方图呈现出较为平均的分布,亮度分布范围广泛。
这表明该图像中包含了丰富的亮度细节,从明亮的天空到昏暗的山脉,再到黑暗的树林,图像中的各个部分亮度差异较大。
这种直方图特点与自然风景图像的特点相符,展示了大自然的多样性和丰富性。
2. 人物肖像图像的直方图人物肖像图像的直方图呈现出较为集中的分布,亮度主要集中在中间区域。
这表明该图像中的人物主体亮度较为均匀,没有明显的高光或阴影。
这种直方图特点与人物肖像图像的特点相符,突出了人物的面部特征和表情。
3. 抽象艺术图像的直方图抽象艺术图像的直方图呈现出较为离散的分布,亮度分布呈现出一定的规律性。
这表明该图像中存在着一些重复出现的亮度模式或纹理。
这种直方图特点与抽象艺术图像的特点相符,强调了艺术家对于形式和结构的探索。
四、实验总结通过对不同类型图像的直方图分析,我们可以发现图像直方图与图像内容和特征之间存在一定的关联性。
自然风景图像的直方图展示了大自然的多样性和丰富性,人物肖像图像的直方图突出了人物的面部特征和表情,抽象艺术图像的直方图强调了艺术家对于形式和结构的探索。
因此,在图像处理中,我们可以通过对图像直方图的分析,更好地理解图像的内容和特征,为后续的图像处理工作提供参考。
实验一_灰度图像直方图统计
实验一 灰度图像直方图统计一. 实验目的掌握灰度图像直方图的概念和计算方法,了解直方图的作用和用途。
能初步掌握图像文件格式的读写与图像数据处理,提高学生兴趣,巩固所学知识。
二. 实验内容和要求(1) 用Photoshop 显示图像的灰度直方图,从直方图上了解图像平均明暗度和对比度等信息;(2) 读取和显示一幅灰度图象;(3) 编写直方图统计的程序。
三.实验原理1.了解灰度直方图定义灰度直方图反映的是一幅图像中各灰度级像素出现的频率。
以灰度级为横坐标,纵坐标为灰度级的频率,绘制频率同灰度级的关系图就是灰度直方图。
它是图像的一个重要特征,反映了图像灰度分布的情况。
2.了解直方图的绘制原理频率的计算公式为: 1) 统计图像中像素的总个数n ;2) 找出图像中灰度级的分布范围,0~i ;3) 统计出图像中每个灰度对应的像素的个数ni;4) 用公式计算出每个灰度级像素出现的频率 5)以灰度级为横坐标,纵坐标为灰度级的频率,绘制出直方图;3.图像二值化的原理将256个亮度等级的灰度图像通过适当的阈值选取,获得仍然可以反映图像整体和局部特征的二值化图像。
在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。
使用直方图方法来寻找二值化阈值,该方法选择二值化阈值主要是发现图像的两个最高的峰,阈值取值在两个峰之间的峰谷最低处。
所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255表示,小于阈值的像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。
四.实验步骤1. 用Photoshop 显示直方图:nn v ii =nn v ii =Photoshop软件是Adobe发行的功能强大的图像处理软件,简称“PS”,Photoshop主要处理以像素所构成的数字图像。
其处理过程直观,速度快,在平常编写专业图像处理算法前,一般会用photoshop先分析下图像的特征等等。
直方图均衡实验报告
数字图像处理实验报告实验二图像直方图均衡姓名:*******学号:*********专业:************一.实验目的学习并掌握图像直方图均衡的基本理论,并通过分析均衡前后的图像验证课堂教学内容,总结直方图均衡的特点。
二.实验内容对图像 img2 进行直方图均衡(img2为X光片图像)1.对比均衡前后图像的直方图及特点,①图形显示其直方图以及灰度映射关系②计算以下参数:概率非零灰度数,概率非零灰度中最大概率、最小概率、最大最小概率之比。
③统计图像中概率大于平均概率的灰度级数;④计算非零概率的平均值和方差⑤您认为哪些参数能够表现图像直方图分布的均匀程度?试提取相关参数进行测试。
2.找一到两幅图像重复上述实验。
3.通过实验结果对比,能得出什么结论?三、实验报告要求1.源程序(C或Matlab):(1).画直方图的Matlab程序filname='E:\课件\大三下\图像处理\实验二\1.bmp'; //打开文件A=imread(filname); //读取文件信息imhist(A); //画出图像文件的直方图(2)C程序#include<stdio.h>#include<windows.h>#include<string.h>#include<math.h>BITMAPFILEHEADER bfh;BITMAPINFOHEADER bih;typedef struct PP{unsigned char GRAY;}PIXEL;////画出灰度映射关系图////void draw(double s[]){FILE *fout,*fin;int i,j;PIXEL p[256][256];BITMAPFILEHEADER m_bfh;BITMAPINFOHEADER m_bih;RGBQUAD colorPanel[256];fin=fopen("1.bmp","rb");fread(&m_bfh,1,sizeof(BITMAPFILEHEADER),fin);fread(&m_bih,1,sizeof(BITMAPINFOHEADER),fin);fread(colorPanel,256,sizeof(RGBQUAD),fin);fclose(fin);fout=fopen("Gray mapping relationship.bmp","wb");m_bih.biWidth=256;m_bih.biHeight=256;m_bih.biSizeImage=256*256;m_bfh.bfSize=m_bfh.bfOffBits+m_bih.biSizeImage;for(i=0;i<256;i++)for(j=0;j<256;j++) p[i][j].GRAY=255;for(i=0;i<256;i++){j=(int)s[i];p[i][j].GRAY=0;}fwrite(&m_bfh,1,sizeof(BITMAPFILEHEADER),fout);fwrite(&m_bih,1,sizeof(BITMAPINFOHEADER),fout);fwrite(colorPanel,256,sizeof(RGBQUAD),fout);fwrite(p,256*256,1,fout);fclose(fout);}////统计概率非零灰度数子函数 ///double nonzero(double p[])int i;double sum=0;for(i=0;i<256;i++)if(p[i]!=0) sum=sum+1;printf("概率非零灰度数:%.2f\n",sum);return sum;}////找到最大概率子函数////double lmax(double p[]){int i;double max;for(i=0;i<256;i++) //对max初始化if(p[i]!=0){max=p[i];break;}for(i=0;i<256;i++)if(p[i]!=0&&p[i]>max) max=p[i]; //找出概率非零最大值printf("概率非零最大值:%lf\n",max);return max;}////找到最小概率子函数////double lmin(double p[]){int i;double min;for(i=0;i<256;i++) //对min初始化if(p[i]!=0){min=p[i];break;}for(i=0;i<256;i++)if(p[i]!=0&&p[i]<min) min=p[i]; //找出概率非零最小值printf("概率非零最小值:%lf\n",min);return min;}////求最大最小概率之比子函数////double rate(double max,double min){double r;r=max/min;printf("最大最小概率之比:%lf\n",r);return r;}////统计图像中概率大于平均概率的灰度级数子函数 //// double lager(double p[]){int i;double sum=0;for(i=0;i<256;i++)if(p[i]>1.0/256) sum=sum+1;printf("图像中概率大于平均概率的灰度级数:%lf\n",sum);return sum;}////求非零概率的平均值的子函数////double average(double sum){double aver;aver=1.0/sum;printf("非零概率的平均值:%lf\n",aver);return aver;}////求非零概率的方差的子函数////double variance(double sum,double p[],double aver){int i;double asum=0,var;for(i=0;i<256;i++)if(p[i]!=0) asum=asum+pow((p[i]-aver),2);//printf("%lf\n",asum);var=asum/sum;printf("非零概率的方差:%lf\n",var);return var;}/////主函数//////int main(){FILE *fin,*fout;RGBQUAD colorPanel[256];PIXEL **bmpData;long i,j;double num[256]={0},p[256]={0},s[256]={0};double max,min,r,sum=0,asum=0,aver,psum=0,var;fin=fopen("1.bmp","rb");fread(&bfh,1,sizeof(BITMAPFILEHEADER),fin);fread(&bih,1,sizeof(BITMAPINFOHEADER),fin);fread(colorPanel,256,sizeof(RGBQUAD),fin);bmpData=(PIXEL **)malloc(bih.biHeight*sizeof(PIXEL *));for(i=0;i<bih.biHeight;i++){bmpData[i]=(PIXEL *)malloc(bih.biWidth*sizeof(PIXEL));fread(bmpData[i],bih.biWidth,sizeof(PIXEL),fin);}fclose(fin);////对图像进行直方图均衡////for(i=0;i<bih.biHeight;i++){ //二重循环遍历图象数据for(j=0;j<bih.biWidth;j++){num[bmpData[i][j].GRAY]++; //当前灰度级象素/总象素}}for(i=0;i<256;i++)p[i]=num[i]/bih.biWidth/bih.biHeight; //计算灰度概率s[0]=p[0];for(i=1;i<256;i++){s[i]=s[i-1]+p[i]; //计算累积概率(低灰度概率加到高灰度概率上)}for(i=0;i<256;i++){ //0~1映射到0~255s[i]=s[i]*255;for(j=0;j<256;j++){if(s[i]>=j-0.5&&s[i]<j+0.5)s[i]=j;}}for(i=0;i<bih.biHeight;i++){ //对原图像进行直方图均衡for(j=0;j<bih.biWidth;j++){bmpData[i][j].GRAY=(unsignedchar)s[bmpData[i][j].GRAY];}}////计算各个参数////sum=nonzero(p); //概率非零灰度数max=lmax(p); //概率非零灰度中最大概率min=lmin(p); //概率非零灰度中最小概率r=rate(max,min); //最大最小概率之比asum=lager(p); //图像中概率大于平均概率的灰度级数aver=average(sum); //非零概率的平均值var=variance(sum,p,aver); //非零概率的方差draw(s); //画灰度映射关系曲线fout=fopen("3.bmp","wb");fwrite(&bfh,1,sizeof(BITMAPFILEHEADER),fout);fwrite(&bih,1,sizeof(BITMAPINFOHEADER),fout);fwrite(colorPanel,256,sizeof(RGBQUAD),fout);for(i=0;i<bih.biHeight;i++)fwrite(bmpData[i],bih.biWidth,sizeof(PIXEL),fout);fclose(fout);return 0;}2.程序流程图:3.实验结果图像及对应参数:(1)图一:均衡前:均衡前直方图:灰度映射:对应参数:均衡后:均衡后的直方图:对应参数:均衡前后灰度映射关系:横轴表示均衡前的灰度,纵轴表示均衡后的灰度。
实验2(A) 灰度图像直方图统计与均衡化
解:可以用来对图像进行均衡化处理,提升图像的对比对。
3. 在本次实习的基础上,试编写直方图均衡的程序。
(见代码段)
4. 直方图是什么概念?它反映了图像的什么信息?
解:直方图(Histogram)又称柱状图、质量分布图。是一种统计报告图,由一系列高度不
等的纵向条纹或线段表示数据分布的情况。它反映了图象中具有每种灰度级的象素的个
图像 f(x, y)的灰度直方图 hist[0, …, L-1]可用如下步骤计算获得:
① 初始化,hist[k]=0 ; k=0, 1, …, L-1。
② 按像素扫描图像,对灰度级中的每个灰度值,统计图像中具有该灰度值的像素个数。
hist f x, y ; x 0,1, , M 1; y 0,1, , N 1
cvNamedWindow( "result", 0 );
// 计算直方图
hist = cvCreateHist( 1, &n, CV_HIST_ARRAY, &hranges, 1 );
histimg = cvCreateImage( cvSize(320,200), 8, 3 );
cvZero( histimg );
直方图是图像的最基本的统计特征,它反映的是图像的灰度值的分布情况。直方图均衡 化的目的是使图像在整个灰度值动态变化范围内的分布均匀化,改善图像的亮度分布状态, 增强图像的视觉效果。灰度直方图是图像预处理中涉及最广泛的基本概念之一。
图像的直方图事实上就是图像的亮度分布的概率密度函数,是一幅图像的所有象素集合 的最基本的统计规律。直方图反映了图像的明暗分布规律,可以通过图像变换进行直方图调 整,获得较好的视觉效果。
}
cvCalcHist( &src, hist, 0,r ( x = 0; x < n; x++)
实验一直方图的统计
实验名称:直方图的修正
一.实验内容:
1.打开bhtmref.img影像,并进行标准假彩色合成;
2.对经过标准假彩色合成后的影像进行均衡化;
3.对经过标准假彩色合成后的影像进行规定划,即与目标影像匹配;
4.对上述三种影像分别进行直方图统计,并比较相关数据。
二.实验所用的仪器设备,包括用到的数据:
ENVI4.3软件,bhtmref.img影像.
三.实验原理:
1.经过标准假彩色合成,分别给TM2,TM3,TM4赋予蓝绿红三色,使图像清晰,特征明显;2.对原始直方图进行一定的加工,使其各像元的灰度变得均匀;
3.对原始直方图进行一定的加工,使其变成事先规定的直方图。
4.分别对各次所得到的直方图进行统计。
四.实验步骤及其结果分析:
1.对bhtmref.img影像先进行直方图的统计,然后输出,并截图如下:
2.对经过均衡化的影像进行直方图的统计,然后输出,并截图如下:
3.对给定影像,进行直方图的统计,并输出如下:
4.对进行规定化后的影像,进行直方图的统计,截图如下:
五.实验中遇到的问题及其解决方法:
问题一:初次使用ENVI软件,对软件的功能比较陌生,怎么办?
答:通过做作业来加强练习,效果不错。
问题二:实验操作基本掌握,但是对其本质的理解不够透彻,如何解决?
答:首先通过自己不断操作,来不断加深印象,然后通过与同学之间的交流,、取长补短,共同进步,加深对知识的理解。
问题三:对以后遥感课程的学习有何打算?
答:上课一定要认真听讲,不能走神,充分把握重点难点,课后认真复习,课前认真预习。
实验二 图像直方图分析
实验二图像直方图分析一.实验目的及要求1.了解MATLAB的操作环境和基本功能。
2.掌握MATLAB中图像增强与平滑的函数的使用方法。
3.加深理解图像增强与平滑的算法原理。
二、实验内容(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。
熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。
(可将每段程序保存为一个.m文件)1.直方图均衡化clear all; close all % Clear the MATLAB workspace of any variables% and close open figure windows.I = imread('pout.tif'); % R eads the sample images ‘ pout.tif’, and stores it inimshow(I) % an array named I.display the imagefigure, imhist(I) % Create a histogram of the image and display it in% a new figure window.[I2,T] = histeq(I); % Histogram equalization.figure, imshow(I2) % Display the new equalized image, I2, in a new figure window.figure, imhist(I2) % Create a histogram of the equalized image I2.figure,plot((0:255)/255,T); % plot the transformation curve.imwrite (I2, 'pout2.png'); % Write the newly adjusted image I2 to a disk file named% ‘pout2.png’.imfinfo('pout2.png') % Check the contents of the newly written file2.直接灰度变换clear all; close allI = imread('cameraman.tif'); J = imadjust(I,[0 0.2],[0.5 1]); imshow(I)figure, imshow(J) 注意:imadjust()功能:调整图像灰度值或颜色映像表,也可实现伽马校正。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华侨大学
数字图像处理与图像通信实验报告
实验题目:图像的直方图统计
专业、班级:通信3班
学生姓名:
学号:
分数:
2014 年 6 月 4 日
一、实验目的:
掌握直方图统计的算法原理和程序设计,了解各种图像的直方图统计的意义及其用途。
二、实验设备:
计算机、matlab 7.0软件
三、实验原理
灰度直方图是灰度值的函数,描述的是图像中具有该灰度值的像素的个数,其横坐标表示像素的灰度级别,纵坐标是该灰度出现的频率(像素个数与图像像素总数之比)。
直方图的作法如下: a )将图像的灰度级归一化
若图像的灰度级为:0,1,
,1,L -则令
,0,1,,1
10 1.k k k
r k L L r =
=--≤≤则
在灰度级中,0k r =代表黑,1k r =代表白。
对于一幅给定的图像来说,每一个像素取得[0,1]区间内的灰度级是随机的,也就是说k r 是一个随机变量。
b)计算各灰度级的像素概率
()()k k k r k k r k n r n n p r n n k p r =
设为灰度级为的像素的个数,为总的像素个数,令
是像素值为的像素的频数,为其出现的概率 c)作图
建立直角坐标系,横轴表示r k 的取值,纵轴表示p r (r k )的取值,作p r (r k )的函数图。
四、实验内容:
实现对一幅灰度图像的像素的统计,并绘制直方图。
程序编码:
I=imread('C:\MATLAB7\work\2.png'); figure(1)
subplot(1,2,1) imshow(I); title('原图') add=[];
tab1=zeros(1,256) for n=0:255 X=I==n;
add=[add;sum(sum(X))]; end;
[a b]=size(I); final=add/(a*b); subplot(1,2,2); bar(0:255,final,'g'); title('灰度级图象')
原图
-100
010*******
00.005
0.01
0.015
0.02
0.025
0.03
0.035
灰度级图象。