数字图像处理课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

河南理工大学测绘与国土信息工程学院《数字图像处理》

课程设计报告

( 2018 - 2019 学年第 2 学期)

班级:

学号:

姓名:

指导教师:

评语:

成绩:

批阅签字:

批阅日期:年月日

课程设计项目:灰度图像对比度增强

一、课程设计项目说明

在图像处理中,点运算是一种简单而又很重要的技术。对于一幅输入图像,经过点运算将产生一幅输出图像,输出图像上每个像素的灰度值仅由相应输入原像素的值决定。对比度增强,对比度拉伸或灰度变换都属于点运算。点运算是图像数字化软件和图像显示软件的重要组成部分。

熟悉图像增强点运算方法,编程实现图像对比度增强算法,掌握灰度图像基本处理

技术。

我们在此选取属于点运算的灰度变换来对图像进行对比度增强处理:灰度变换可使

图像动态范围增大,图像对比度扩展,图像变清晰,特征明显,是图像增强的重要手段

之一。

1.线性变换

若原图像f(i,j)的灰度范围为[a,b],线性变换后图像g(i,j)的范围为[a′,b′],则g(i,j)与f(i,j)之间的关系式可以用下式来表示:

(f(i,j)−a)①

g(i,j)=a′+b′−a′

b−a

当b−a

当b−a>b′−a′时,图像亮度范围缩小,图像被压缩;

2.对数变换

对数变换的一般表达式为:

g(i,j)=a+ln[f(i,j)+1]

b∙lnc

这里a,b,c是为了调整曲线的位置和形状而引入的参数。当希望对图像的低灰度区进

行较大的拉伸而对高灰度区压缩时,可以采用这种变换,它能够使图像灰度分布与人的

视觉特性相匹配。并且当c越大时,压缩程度越大。

二、算法实现的主要内容

//线性灰度变换

void CLiView::OnBinary1()

{ //获取文档指针

CLiDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

//确保有BMP图像打开,否则弹出"Error!"对话框

if(pDoc->m_pDib == NULL)

{AfxMessageBox("Error!");

return;}

//开始进行图像的灰度变换处理

lxk:Cxxbh dlginputxxbh;//定义线性变换对话框类对象

dlginputxxbh.DoModal();//弹出对话框

UpdateData(TRUE);//将编辑框内的值赋给对应成员函数

if (dlginputxxbh.m_u

{AfxMessageBox("Error!\n请勿颠倒上下限!");

goto lxk;}/*当操作者所给上限小于下限时弹出错误提示对话框,关闭该对话框后,系统自动

将编辑框内数据清零,此时可重新输入数据*/

int mcols = pDoc->m_pDib->m_nCols,jcols;

int mrows = pDoc->m_pDib->m_nRows,irows;

unsigned char* m_pData=NULL;

m_pData = pDoc->m_pDib->pImgData;

unsigned char* m_pDataOldPos = m_pData;

for(irows = 0; irows < mrows; irows++)

{

for(jcols = 0; jcols < mcols; jcols++)

{

m_pData += irows * mcols + jcols;//计算当前位图数据位置

*m_pData = dlginputxxbh.m_d+(dlginputxxbh.m_u-

dlginputxxbh.m_d)**m_pData/255;/*根据式①计算灰度变换后灰度值并替换当前灰度值*/ m_pData = m_pDataOldPos;//重置m_pData}}

pDoc->UpdateAllViews(NULL);//刷新视图

}

//对数变换

void CLiView::OnBinary()2

{//获取文档指针

CLiDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

//确保有BMP图像打开,否则弹出"Error!"对话框

if(pDoc->m_pDib == NULL)

{AfxMessageBox("Error!");

return;}

//开始进行图像的对数变换处理

Cdsbh dlginputds;//定义对数变换对话框类对象

dlginputds.DoModal();//弹出对话框

UpdateData(TRUE); //将编辑框内的值赋给对应成员函数

int mcols = pDoc->m_pDib->m_nCols,jcols;

int mrows = pDoc->m_pDib->m_nRows,irows;

unsigned char* m_pData=NULL;

m_pData = pDoc->m_pDib->pImgData;

unsigned char* m_pDataOldPos = m_pData;

for(irows = 0; irows < mrows; irows++)

{

for(jcols = 0; jcols < mcols; jcols++)

{

m_pData += irows * mcols + jcols;

*m_pData = (log10(*m_pData+1))/( dlginputds.b*log10(dlginputds.c))+ dlginputds.a; /*根据式②计算灰度变换后灰度值并替换当前灰度值*/

//在此取a=2,b=1,c=0.233作为实验结果

m_pData = m_pDataOldPos; //重置m_pData}}

pDoc->UpdateAllViews(NULL); //刷新视图

}

相关文档
最新文档