数字图像处理课程设计报告---直方图均衡化

更新时间:2023-07-20 18:20:11 阅读: 评论:0

设计题目:直方图均衡化
1、直方图的理论根底:
〔1〕直方图概念:灰度直方图表示图像中每种灰度出现的频率。
〔2〕直方图的作用: 反映一幅图像的灰度分布特性
〔3〕直方图的计算:  式中:n k 为图像中出现r k 级灰度的像素数,n 是图像像素总数,而n k /n 即为频数。
2、设计目的: 产生一幅灰度级分布具有均匀概率密度的图像,扩展像素取值的动态范围,
到达了图象增强的目的。
3、直方图均衡化的效果  :
1〕变换后直方图趋向平坦,灰级减少,灰度合并。
2〕原始象含有象素数多的几个灰级间隔被拉大了,压缩的只是象素数少的几个灰
度级,实际视觉能够接收的信息量大大地增强了,增加了图象的反差。同
时,也增加了图象的可视粒度。
4、离散情况下的直方图均衡化的算法:
A 、列出原始图像的灰度级
B 、统计各灰度级的像素数目
C 、计算原始图像直方图各灰度级的频数
D 、计算累积分布函数 F 、应用以下公式计算映射后的输出图像的灰度级,P 为输出图像灰度级的个数,
其中INT 为取整符号:
G 、用的映射关系修改原始图像的灰度级,从而获得直方图近似为均匀分布的输出
图像。
3、源程序代码美丽的小金鱼
// cqxhistView.cpp : implementation of the CCqxhistView class
#include "stdafx.h"
#include "cqxhist.h"
#include "cqxhistDoc.h"
球的拼音怎么拼写#include "cqxhistView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
///////////////////////////////////////////////////////////////////////////// // CCqxhistView
IMPLEMENT_DYNCREATE(CCqxhistView, CView)
1,,1,0,-=L j f j  1,,1,0,-=L j n j  1,,1,0,/)(-==L j n n f P j j f  1,,,1,0,)()(0-==∑
=L k j f P f C k j j f
]5.0)()[(min min max ++-=g f C g g INT g i n
n r p k k =)(1,,2,1,010-=≤≤l k r k
BEGIN_MESSAGE_MAP(CCqxhistView, CView)网络安全管理制度
//{{AFX_MSG_MAP(CCqxhistView)
ON_COMMAND(ID_OPEN_IMAGE, OnOpenImage)
ON_COMMAND(ID_HIST_IMAGE, OnHistImage)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////// // CCqxhistView construction/destruction
CCqxhistView::CCqxhistView()
{
// TODO: add construction code here
}
CCqxhistView::~CCqxhistView()
{
}
BOOL CCqxhistView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
//  the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
开小吃店///////////////////////////////////////////////////////////////////////////// // CCqxhistView drawing
void CCqxhistView::OnDraw(CDC* pDC)
{
CCqxhistDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
粗心英语
/
/ TODO: add draw code for native data here
if(m_dib.m_bLoaded==true)  //判断是否加载图像
{
//获取图像宽和高
int nw=m_dib.GetDIBWidth();
int nh=m_dib.GetDIBHeight();
// 显示图像〔具体的参数见CDIB类的该函数说明〕
m_dib.ShowDIB(pDC,10,10,nw,nh,m_dib.m_pDIBData,m_dib.m_pBMI);
m_dib.ShowDIB(pDC,400,10,nw,nh,m_dib.m_pDumpDIBData,m_dib.m_pBMI); }
if(m_bHist==true)
{
/
/绘制原图像的直方图
CString str;
int nh=m_dib.GetDIBHeight();
int i;
// 画坐标轴
// 绘制坐标轴
pDC->MoveTo(410,nh+20);  //〔410,nh+20 〕是直方图的左上角坐标
// 垂直轴
pDC->LineTo(410,nh+200);//〔410,nh+200 〕是直方图的左下角坐标
志愿者活动感想
// 水平轴
pDC->LineTo(710,nh+200);//〔710,nh+200 〕是直方图的右下角坐标
/
/ 写X轴刻度值
str.Format("0");
pDC->TextOut(410, nh+200+10, str);
str.Format("50");
pDC->TextOut(460, nh+200+10, str);
str.Format("100");
pDC->TextOut(510, nh+200+10, str);
str.Format("150");
pDC->TextOut(560, nh+200+10, str);
str.Format("200");
pDC->TextOut(610, nh+200+10, str);
str.Format("255");
pDC->TextOut(665, nh+200+10, str);
凉拌鸡胗的做法// 绘制X轴刻度
for ( i = 0; i < 256; i += 25)
{
if ((i & 1) == 0)
{
// 10的倍数
pDC->MoveTo(i + 10, nh+200-2);
pDC->LineTo(i + 10, nh+200+2);
}
el
{
// 10的倍数
pDC->MoveTo(i + 10, nh+200-2);
pDC->LineTo(i + 10, nh+200+2);
}
}
// 绘制X轴箭头
pDC->MoveTo(705,nh+200-5);
pDC->LineTo(710,nh+200);
pDC->LineTo(705,nh+200+5);
/
/ 绘制y轴箭头
pDC->MoveTo(410,nh+20);
pDC->LineTo(405,nh+20+5);
pDC->MoveTo(410,nh+20);
pDC->LineTo(415,nh+20+5);
int max=0;
for(i=0;i<256;i++)
if(m_yuan[i]>max)
max=m_yuan[i];
for(i=0;i<256;i++)
{
pDC->MoveTo(410+i,nh+200);
pDC->LineTo(410+i,nh+200-(m_yuan[i]*160/max));
}
}
if(m_bHist==true)
{
//绘画直方图
CString str;
int nh=m_dib.GetDIBHeight();
int i;
// 画坐标轴
/
/ 绘制坐标轴
pDC->MoveTo(10,nh+20);  //〔10,nh+20 〕是直方图的左上角坐标// 垂直轴
pDC->LineTo(10,nh+200);//〔10,nh+200 〕是直方图的左下角坐标// 水平轴
pDC->LineTo(310,nh+200);//〔310,nh+200 〕是直方图的右下角坐标// 写X轴刻度值
str.Format("0");
pDC->TextOut(10, nh+200+10, str);
str.Format("50");
pDC->TextOut(60, nh+200+10, str);
str.Format("100");
pDC->TextOut(110, nh+200+10, str);
str.Format("150");
pDC->TextOut(160, nh+200+10, str);
str.Format("200");
pDC->TextOut(210, nh+200+10, str);
str.Format("255");
pDC->TextOut(265, nh+200+10, str);
// 绘制X轴刻度
for ( i = 0; i < 256; i += 25)
{
if ((i & 1) == 0)
{
// 10的倍数
pDC->MoveTo(i + 10, nh+200-2);
pDC->LineTo(i + 10, nh+200+2);
}
el
{
// 10的倍数
pDC->MoveTo(i + 10, nh+200-2);
pDC->LineTo(i + 10, nh+200+2);
}
}
顶心
// 绘制X轴箭头
pDC->MoveTo(305,nh+200-5);
pDC->LineTo(310,nh+200);
pDC->LineTo(305,nh+200+5);
// 绘制y轴箭头
pDC->MoveTo(10,nh+20);
pDC->LineTo(5,nh+20+5);
pDC->MoveTo(10,nh+20);
pDC->LineTo(15,nh+20+5);
int max=0;
for(i=0;i<256;i++)
if(m_hist[i]>max)
max=m_hist[i];
for(i=0;i<256;i++)
{
pDC->MoveTo(10+i,nh+200);
pDC->LineTo(10+i,nh+200-(m_hist[i]*160/max));
}
}
}

本文发布于:2023-07-20 18:20:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1089426.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:直方图   图像   灰度级   灰度
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图