




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字图像处理实验模块/ jihanfeiDoc.cpp : implementation of the CJihanfeiDoc class/#include stdafx.h#include jihanfei.h#include math.h#include jihanfeiDoc.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CJihanfeiDocIMPLEMENT_DYNCREATE(CJihanfeiDoc, CDocument)BEGIN_MESSAGE_MAP(CJihanfeiDoc, CDocument)/AFX_MSG_MAP(CJihanfeiDoc)ON_COMMAND(ID_fei, Onfei)ON_COMMAND(ID_niu, Onniu)ON_COMMAND(ID_ji, Onji)ON_COMMAND(ID_a, Ona)ON_COMMAND(ID_b, Onb)ON_COMMAND(ID_zq, Onzq)ON_COMMAND(ID_count, Oncount)ON_COMMAND(ID_neibor, Onneibor)ON_COMMAND(ID_neibor8, Onneibor8)ON_COMMAND(ID_mneibor, Onmneibor)ON_COMMAND(ID_gaosi, Ongaosi)ON_COMMAND(ID_center, Oncenter)ON_COMMAND(ID_layer, Onlayer)ON_COMMAND(ID_one, Onone)ON_COMMAND(ID_two, Ontwo)ON_COMMAND(ID_Robert, OnRobert)ON_COMMAND(ID_Sobel, OnSobel)ON_COMMAND(ID_zhijie, Onzhijie)ON_COMMAND(ID_erjie, Onerjie)ON_COMMAND(ID_average, Onaverage)ON_COMMAND(ID_Hough, OnHough)ON_COMMAND(ID_gaositidu, Ongaositidu)ON_COMMAND(ID_trail, Ontrail)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CJihanfeiDoc construction/destructionCJihanfeiDoc:CJihanfeiDoc()/ TODO: add one-time construction code hereCJihanfeiDoc:CJihanfeiDoc()BOOL CJihanfeiDoc:OnNewDocument()if (!CDocument:OnNewDocument()return FALSE;/ TODO: add reinitialization code here/ (SDI documents will reuse this document)return TRUE;/ CJihanfeiDoc serializationvoid CJihanfeiDoc:Serialize(CArchive& ar)if (ar.IsStoring()/ TODO: add storing code hereelse/ TODO: add loading code here/ CJihanfeiDoc diagnostics#ifdef _DEBUGvoid CJihanfeiDoc:AssertValid() constCDocument:AssertValid();void CJihanfeiDoc:Dump(CDumpContext& dc) constCDocument:Dump(dc);#endif /_DEBUG/ CJihanfeiDoc commandsBOOL CJihanfeiDoc:OnOpenDocument(LPCTSTR lpszPathName) if (!CDocument:OnOpenDocument(lpszPathName)return FALSE;if (!m_Dib.Read_8BitsGray_Image(lpszPathName)/ 判断读取文件是否成功CString strMsg;/ 失败,可能非BMP格式strMsg = 读取图像时出错!可能是不支持该类型的图像文件!;/ 提示出错MessageBox(NULL, strMsg, 系统提示, MB_ICONINFORMATION | MB_OK);return FALSE;/ 返回FALSEelsem_Dib.MakePalette();SetPathName(lpszPathName);/ 设置文件名称SetModifiedFlag(FALSE);/ 初始化脏标记为FALSEreturn TRUE;/ 返回TRUEreturn TRUE;BOOL CJihanfeiDoc:CanCloseFrame(CFrameWnd* pFrame) / TODO: Add your specialized code here and/or call the base classreturn CDocument:CanCloseFrame(pFrame);void CJihanfeiDoc:Onfei() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数float temp=0.0f;/ 临时变量double dtemp=0;/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针int i;/ 循环变量int j;float fSlope=1.4f;float fIntercept=20.0f;for (i=0;iiHeight;i+)for (j=0;j128)*lpPixel=255;else*lpPixel=0;UpdateAllViews(NULL);return;void CJihanfeiDoc:Onniu() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数float temp=0.0f;/ 临时变量double dtemp=0;/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针int i;/ 循环变量int j;float fSlope=1.4f;float fIntercept=20.0f;for (i=0;iiHeight;i+)for (j=0;jiWidth;j+)/读取每象素存储位置lpPixel=(unsigned char*)lpStartBit + (iHeight-1-i) * iBitsWidth + j;/ 以下位置填写代码实现线性变换*lpPixel=255-*lpPixel;UpdateAllViews(NULL);return;void CJihanfeiDoc:Onji() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数float temp=0.0f;/ 临时变量double dtemp=0;/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针int i;/ 循环变量int j;float fSlope=1.4f;float fIntercept=20.0f;long plcount256;for (i=0;iiHeight;i+)for (j=0;jiWidth;j+)/读取每象素存储位置lpPixel=(unsigned char*)lpStartBit + (iHeight-1-i) * iBitsWidth + j;plcount*(lpPixel)+;/ 以下位置填写代码实现线性变换UpdateAllViews(NULL);return;void CJihanfeiDoc:Ona() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数float temp=0.0f;/ 临时变量float dtemp=0;/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针int i;/ 循环变量int j;double fSlope=1.4;double fIntercept=20.0;for (i=0;iiHeight;i+)for (j=0;j255.0)*lpPixel = 255;else if (temp0.0)*lpPixel = 0;else*lpPixel = (unsigned char) (temp+0.5);UpdateAllViews(NULL);return;void CJihanfeiDoc:Onb() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数float temp=0.0f;/ 临时变量double dtemp=0;/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针int i;/ 循环变量int j;double fSlope=0.4;double fIntercept=20.0;for (i=0;iiHeight;i+)for (j=0;j255.0)*lpPixel = 255;else if (temp0.0)*lpPixel = 0;else*lpPixel = (unsigned char) (temp+0.5);UpdateAllViews(NULL);return;void CJihanfeiDoc:Onzq() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针int i;/ 循环变量int j;long plcount256;long laycount256;for (i= 0; i256; i+)/ 计数清空为0plcounti=0;for (i=0;iiHeight;i+) for (j=0;jiWidth;j+)lpPixel=(unsigned char*)lpStartBit + (iHeight-1-i) * iBitsWidth + j;plcount*lpPixel+; double temp=0;for (i= 0; i255) laycounti = 255;for (i=0;iiHeight;i+)for (j=0;jiWidth;j+)/读取每象素存储位置lpPixel=(unsigned char*)lpStartBit + (iHeight-1-i) * iBitsWidth + j;*(lpPixel)=unsigned char(laycount*(lpPixel);UpdateAllViews(NULL);return;/统计量算法增强void CJihanfeiDoc:Oncount() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针int i;/ 循环变量int j;float oave;/ 源图像灰度均值,依据实际图像赋值float ostd;/ 源图像灰度标准差,依据实际图像赋值float nave=150;/ 增强后图像的灰度均值,依据实际要求赋值float nstd=64;/ 增强后图像的灰度标准差,依据实际要求赋值float temp;float a;float b;float sum1=0,sum2=0;for (i=0;iiHeight;i+)for (j=0;jiWidth;j+)/读取每象素存储位置lpPixel=(unsigned char*)lpStartBit + (iHeight-1-i) * iBitsWidth + j;sum1+=*lpPixel;oave=sum1/(iHeight*iWidth);for (i=0;iiHeight;i+)for (j=0;jiWidth;j+)/读取每象素存储位置lpPixel=(unsigned char*)lpStartBit + (iHeight-1-i) * iBitsWidth + j;sum2+=float(fabs(*lpPixel-oave)*(fabs(*lpPixel-oave);ostd=sum2/(iHeight*iWidth);a=float(sqrt(nstd/ostd);b=nave-a*oave;for (i=0;iiHeight;i+)for (j=0;j255.0)*lpPixel = 255;else if (temp0.0)*lpPixel = 0;else*lpPixel = (unsigned char) (temp+0.5);UpdateAllViews(NULL);return;/四邻域滤波void CJihanfeiDoc:Onneibor() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数/ 临时变量double dtemp=0;/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针int i;/ 循环变量int j;for (i=1;iiHeight-1;i+)for (j=1;jiWidth-1;j+)/读取每象素存储位置lpPixel=(unsigned char*)lpStartBit + (iHeight-1-i) * iBitsWidth + j;*lpPixel=(*(lpPixel+iBitsWidth)+*(lpPixel-iBitsWidth)+*(lpPixel+1)+*(lpPixel-1)/4;UpdateAllViews(NULL);return;/8邻域滤波void CJihanfeiDoc:Onneibor8() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数/ 临时变量double dtemp=0;/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针int i;/ 循环变量int j;for (i=1;iiHeight-1;i+)for (j=1;jiWidth-1;j+)/读取每象素存储位置lpPixel=(unsigned char*)lpStartBit + (iHeight-1-i) * iBitsWidth + j;*lpPixel=(*(lpPixel-iBitsWidth-1)+*(lpPixel-iBitsWidth+1)+*(lpPixel+iBitsWidth-1)+*(lpPixel+iBitsWidth+1)+*(lpPixel+iBitsWidth)+*(lpPixel-iBitsWidth)+*(lpPixel+1)+*(lpPixel-1)/8;UpdateAllViews(NULL);return;/多邻域滤波void CJihanfeiDoc:Onmneibor() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数/ 临时变量double dtemp=0;/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针unsigned char * lpPixel2;int i;/ 循环变量int j;int p,q;double sum=0;intn=3;for (i=n/2;iiHeight-n/2;i+)for (j=n/2;jiWidth-n/2;j+)/读取每象素存储位置lpPixel=(unsigned char*)lpStartBit + (iHeight-1-i) * iBitsWidth + j;for(p=i-n/2;p=i+n/2;p+)for(q=j-n/2;q=j+n/2;q+)lpPixel2=(unsigned char*)(lpStartBit + (iHeight-1-p) * iBitsWidth + q);sum+=*lpPixel2;*lpPixel=unsigned char(sum/(n*n);sum=0;UpdateAllViews(NULL);return;/高斯滤波void CJihanfeiDoc:Ongaosi() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数/ 临时变量double dtemp=0;/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针int i;/ 循环变量int j;for (i=1;iiHeight-1;i+)for (j=1;jiWidth-1;j+)/读取每象素存储位置lpPixel=(unsigned char*)lpStartBit + (iHeight-1-i) * iBitsWidth + j;*lpPixel=(*(lpPixel-iBitsWidth-1)+*(lpPixel-iBitsWidth+1)+*(lpPixel+iBitsWidth-1)+*(lpPixel+iBitsWidth+1)+*(lpPixel+iBitsWidth)*3+*(lpPixel-iBitsWidth)*3+*(lpPixel+1)*3+*(lpPixel-1)*3+*lpPixel*8)/24;UpdateAllViews(NULL);return;/中值滤波void CJihanfeiDoc:Oncenter() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数/ 临时变量double dtemp=0;/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针unsigned char * lpPixel2;int i;/ 循环变量int j;int p,q;char temp;double sum=0;intn=3;for (i=n/2;iiHeight-n/2;i+)for (j=n/2;jiWidth-n/2;j+)/读取每象素存储位置lpPixel=(unsigned char*)lpStartBit + (iHeight-1-i) * iBitsWidth + j;for(p=i-n/2;pi+n/2;p+)for(q=j-n/2;q(*(lpPixel2+1)temp=*lpPixel2;*lpPixel2=*(lpPixel2+1);*(lpPixel2+1)=temp;if(*lpPixel5)*lpPixel=*(lpPixel2-n/2*iBitsWidth-n/2);else*lpPixel=*lpPixel;UpdateAllViews(NULL);return;/梯度法锐化void CJihanfeiDoc:Onlayer() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数/ 临时变量double dtemp=0;/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针int i;/ 循环变量int j;char x;char y;char p;for (i=0;iiHeight-1;i+)for (j=0;j80)*lpPixel=255;else *lpPixel=0;UpdateAllViews(NULL);return;/水平方向微分算子void CJihanfeiDoc:Onone() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数/ 临时变量double dtemp=0;/ 临时变量unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针int i;/ 循环变量int j;for (i=1;iiHeight-1;i+)for (j=1;j130)*lpPixel=255;else*lpPixel=0;UpdateAllViews(NULL);return;/垂直方向微分算子void CJihanfeiDoc:Ontwo() / TODO: Add your command handler code hereLPSTR lpStartBit = m_Dib.GetPixelBit();/ 象素起始位置指针if (lpStartBit = NULL)/ 找不到象素起始位置指针return ;/ 返回FALSEint iWidth = m_Dib.GetWidth();/ 图象宽度int iHeight = m_Dib.GetHeight();/ 图象高度int iBitsWidth = m_Dib.GetBitsWidth();/ 图象中每行的字节数/ 临时变量double dtemp=0;/ 临时变量 unsigned char * lpPixel;/ 指向源DIB图像象素位置的指针int i;/ 循环变量int j;for (i=1;iiHeight-1;i+)for (j=1;j130)*lpPixel=255;else *lpPixel=0;UpdateAllViews(NULL);return;/Robert算子锐化void CJihanfeiDoc:OnRobert() / TODO:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025四川省绵阳第一中学第三次考核招聘教师9人笔试模拟试题及答案解析
- 2025西安医专附属医院8月招聘(41人)笔试备考题库及答案解析
- 2025广西桂林市兴安县帝禾牲畜屠宰有限公司招聘1人笔试模拟试题及答案解析
- 2025贵州六盘水市教育局招聘城镇公益性岗位笔试模拟试题及答案解析
- 2025四川川航航空发动机维修工程有限责任公司招聘1人笔试备考试题及答案解析
- 2025内蒙古西部天然气蒙东管道有限公司招聘20人考试模拟试题及答案解析
- 2025年吉安市吉州区创新产业投资集团有限公司面向社会公开招聘1名网格巡防员笔试参考题库附答案解析
- 2025云南省交通运输综合行政执法局文山支队招聘(3人)考试模拟试题及答案解析
- 地产项目建设监理协议
- 2025四川宜宾市筠连县考调公务员 (参照管理工作人员)30人笔试模拟试题及答案解析
- 疯狂动物城完
- 文印服务投标方案(技术方案)
- 九年级物理第21章《信息的传递》全章课件
- 沂水县中小学教师考试真题题库
- 三菱电梯前景光电称重DTZZIII-M1调试说明
- 争分夺秒-团队拓展游戏
- 中小企业人力资源管理问题及对策研究
- 申论范文 | 善用“加减乘除”答好为民服务“满意卷”
- 学校信息化设备运维服务方案
- 保险学PPT完整全套教学课件
- 羊场粪污及病死羊无害化处理技术规程:粪污无害化处理技术规程
评论
0/150
提交评论