图形图像期末课程设计Word格式.docx

上传人:b****6 文档编号:17474714 上传时间:2022-12-01 格式:DOCX 页数:11 大小:18.47KB
下载 相关 举报
图形图像期末课程设计Word格式.docx_第1页
第1页 / 共11页
图形图像期末课程设计Word格式.docx_第2页
第2页 / 共11页
图形图像期末课程设计Word格式.docx_第3页
第3页 / 共11页
图形图像期末课程设计Word格式.docx_第4页
第4页 / 共11页
图形图像期末课程设计Word格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

图形图像期末课程设计Word格式.docx

《图形图像期末课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《图形图像期末课程设计Word格式.docx(11页珍藏版)》请在冰豆网上搜索。

图形图像期末课程设计Word格式.docx

均值滤波器也是平滑线性滤波器,常用于模糊处理和减小噪声,模糊处理

经常用于预处理。

例如,在提取大的目标之前除去信号中的一些琐碎细节、桥接直线或曲线的缝隙。

通过线性滤波器和非线性滤波器可以减小噪声。

程序设计:

具体代码如下:

//MyDIPView.cpp:

implementationoftheCMyDIPViewclass

//

#include"

stdafx.h"

MyDIP.h"

MyDIPDoc.h"

MyDIPView.h"

math.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/*****************************************************

*

*函数名称:

*Template:

*

*参数:

*HDIBhDIB-图像的句柄

*double*tem-指向模板的指针

*inttem_w-模板的宽度

*inttem_h-模板的高度

*doublexishu-模板的系数

*功能:

*对图像进行模板操作

*说明:

*为处理方便起见,模板的宽度和高度都应为奇数

*******************************************************/

HDIBTemplate(HDIBhDIB,double*tem,inttem_w,inttem_h,doublexishu)

{

//统计中间值

doublesum;

//指向图像起始位置的指针

BYTE*lpDIB=(BYTE*):

:

GlobalLock((HGLOBAL)hDIB);

//指向象素起始位置的指针

BYTE*pScrBuff=(BYTE*):

FindDIBBits((char*)lpDIB);

//获取图像的颜色信息

intnumColors=(int):

DIBNumColors((char*)lpDIB);

//如果图像不是256色返回

if(numColors!

=256)

{

//解除锁定

:

GlobalUnlock((HGLOBAL)hDIB);

//返回

return(hDIB);

}

//将指向图像象素起始位置的指针,赋值给指针变量

BYTE*oldbuf=pScrBuff;

//循环变量

inti,j,m,n;

intw,h,dw;

//获取图像的宽度

w=(int):

DIBWidth((char*)lpDIB);

//获取图像的高度

h=(int):

DIBHeight((char*)lpDIB);

//计算图像每行的字节数

dw=(w+3)/4*4;

//建立一个和原图像大小相同的25色灰度位图

HDIBnewhDIB=NewDIB(w,h,8);

//指向新的位图的指针

BYTE*newlpDIB=(BYTE*):

GlobalLock((HGLOBAL)newhDIB);

//指向新的位图的象素起始位置的指针

BYTE*destBuf=(BYTE*)FindDIBBits((char*)newlpDIB);

//将指向新图像象素起始位置的指针,赋值给指针变量

BYTE*newbuf=destBuf;

//对图像进行扫描

//行

for(i=0;

i<

h;

i++)

//列

for(j=0;

j<

w;

j++)

//为统计变量赋初始值

sum=0;

//对于图像的4个边框的象素保持原灰度不变

if(j<

((tem_w-1)/2)||j>

(w-(tem_w+1)/2)||i<

((tem_h-1)/2)||i>

(h-(tem_h+1)/2))

*(newbuf+i*dw+j)=*(oldbuf+i*dw+j);

//对于其他的象素进行模板操作

else

//将点(i,j)点作为模板的中心

for(m=i-((tem_h-1)/2);

m<

=i+((tem_h-1)/2);

m++)

{

for(n=j-((tem_w-1)/2);

n<

=j+((tem_w-1)/2);

n++)

//将以点(i,j)为中心,与模板大小相同的范围内的象素与模板对用位置的系数

//进行相乘并线形叠加

sum+=*(oldbuf+m*dw+n)*tem[(m-i+((tem_h-1)/2))*tem_w+n-j+((tem_w-1)/2)];

}

//将结果乘上总的模板系数

sum=(int)sum*xishu;

//计算绝对值

sum=fabs(sum);

//如果小于0,强制赋值为0

if(sum<

0)

//如果大于255,强制赋值为255

if(sum>

255)

sum=255;

//将计算的结果放到新的位图的相应位置

*(newbuf+i*dw+j)=sum;

}

:

GlobalUnlock((HGLOBAL)hDIB);

//返回新的位图的句柄

return(newhDIB);

}

/////////////////////////////////////////////////////////////////////////////

//CMyDIPView

IMPLEMENT_DYNCREATE(CMyDIPView,CScrollView)

BEGIN_MESSAGE_MAP(CMyDIPView,CScrollView)

//{{AFX_MSG_MAP(CMyDIPView)

ON_COMMAND(ID_MENUITEM32778,OnMenuitem32778)

//}}AFX_MSG_MAP

//Standardprintingcommands

ON_COMMAND(ID_FILE_PRINT,CScrollView:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT,CScrollView:

ON_COMMAND(ID_FILE_PRINT_PREVIEW,CScrollView:

OnFilePrintPreview)

END_MESSAGE_MAP()

//CMyDIPViewconstruction/destruction

CMyDIPView:

CMyDIPView()

//TODO:

addconstructioncodehere

~CMyDIPView()

BOOLCMyDIPView:

PreCreateWindow(CREATESTRUCT&

cs)

ModifytheWindowclassorstylesherebymodifying

//theCREATESTRUCTcs

returnCScrollView:

PreCreateWindow(cs);

//CMyDIPViewdrawing

voidCMyDIPView:

OnDraw(CDC*pDC)

{

CMyDIPDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

if(pDoc->

m_hDIB==NULL)

return;

adddrawcodefornativedatahere

inti,j;

unsignedchar*lpSrc;

LPSTRlpDIB=(LPSTR):

GlobalLock((HGLOBAL)pDoc->

m_hDIB);

intcxDIB=(int):

DIBWidth(lpDIB);

//SizeofDIB-x

intcyDIB=(int):

DIBHeight(lpDIB);

//SizeofDIB-y

LPSTRlpDIBBits=:

FindDIBBits(lpDIB);

//计算图像每行的字节数

longlLineBytes=WIDTHBYTES(cxDIB*8);

//每行

for(i=0;

i<

cyDIB;

i++)

//每列

for(j=0;

j<

cxDIB;

j++)

{

//指向DIB第i行,第j个象素的指针

lpSrc=(unsignedchar*)lpDIBBits+lLineBytes*(cyDIB-1-i)+j;

//计算新的灰度值

//*(lpSrc)=BYTE(255-*lpSrc);

GlobalUnlock((HGLOBAL)pDoc->

CRectrect(0,0,cxDIB,cyDIB),rcDIB(0,0,cxDIB,cyDIB);

PaintDIB(pDC->

m_hDC,&

rect,pDoc->

m_hDIB,&

rcDIB,pDoc->

m_palDIB);

//CMyDIPViewprinting

OnPreparePrinting(CPrintInfo*pInfo)

//defaultpreparation

returnDoPreparePrinting(pInfo);

OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)

addextrainitializationbeforeprinting

OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)

addcleanupafterprinting

//CMyDIPViewdiagnostics

AssertValid()const

CScrollView:

AssertValid();

Dump(CDumpContext&

dc)const

Dump(dc);

CMyDIPDoc*CMyDIPView:

GetDocument()//non-debugversionisinline

ASSERT(m_pDocument->

IsKindOf(RUNTIME_CLASS(CMyDIPDoc)));

return(CMyDIPDoc*)m_pDocument;

#endif//_DEBUG

//CMyDIPViewmessagehandlers

OnSize(UINTnType,intcx,intcy)

OnSize(nType,cx,cy);

OnInitialUpdate()

OnInitialUpdate();

SetScrollSizes(MM_TEXT,GetDocument()->

m_sizeDoc);

//对比度拉伸

//DELvoidCMyDIPView:

OnMenuitem32777()

//DEL{

//DEL

//DEL//获取文档

//DELCMyDIPDoc*pDoc=GetDocument();

//DELinti,j;

//DELintr1=60,r2=200;

//DELdoublek=1.5;

//DELunsignedchar*lpSrc;

//DELASSERT_VALID(pDoc);

//DELif(pDoc->

//DELreturn;

//DELLPSTRlpDIB=(LPSTR):

//DELLPSTRlpDIBBits=:

//DELintcxDIB=(int):

//DELintcyDIB=(int):

//DELlonglLineBytes=WIDTHBYTES(cxDIB*8);

//DEL//每行

//DELfor(i=0;

//DEL{

//DEL//每列

//DELfor(j=0;

//DEL{

//DEL//指向DIB第i行,第j个象素的指针

//DELlpSrc=(unsignedchar*)lpDIBBits+lLineBytes*(cyDIB-1-i)+j;

//DEL//计算新的灰度值

//DELif(*lpSrc<

r1)*lpSrc=BYTE(*lpSrc/k);

//DELelseif(*lpSrc<

r2)*lpSrc=BYTE((*lpSrc-r1)*k+r1/k);

//DELelse*lpSrc=BYTE((*lpSrc-r2)/k+255-(255-r2)/k);

//DEL}

//DEL}

//DEL:

//DELInvalidate(TRUE);

//DEL}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1