欢迎来到天天文库
浏览记录
ID:47502302
大小:387.00 KB
页数:4页
时间:2020-01-12
《一个简单的“photoshop”软件》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一个简单的“photoshop”软件一、课程设计课题做一个简单的“photoshop”软件利用VC++实现软件框架:有操作菜单、能显示某项操作前后的图像。查找相关算法,至少实现3种功能,比如:灰度增强、直方图显示、浮雕等等。二、课程设计目的1.进一步熟悉VC++6.0的MFC编程,熟悉利用CDIB类。进一步巩固数字图像处理的基本概念、理论、分析方法和实现方法;2.结合数字图像处理的理论知识,结合实际,更好培训实践技能,增强应用VC++编写数字图像处理的应用程序及分析、解决实际问题的能力;3.能够针对实践过程的问题,提出有效方案并予以解决,尝
2、试将所学的内容解决实际工程问题,培养学生的工程实践能力,提高工科学生的就业能力。三、设计内容步骤及分析:1.通过网络和图书馆搜索有关图像处理的资料,并学习有关MFC图像处理的内容2.确定方案,开始编写实验代码和调试3.细化代码,运行程序确定要实现图像处理的算法,如直方图均衡化,浮雕等的算法。直方图就是在某一灰度级的象素个数占整幅图像的象素比h=nj/N,其中nj是灰度级在j的象素数,N是总象素数,扫描整幅图像得出的h的离散序列就是图像的直方图,h求和必然=1,所以直方图可以看成是象素对于灰度的概率分布函数。直方图均衡化算法分为三个步骤,第一
3、步是统计直方图每个灰度级出现的次数,第二步是累计归一化的直方图,第三步是计算新的像素值。对于彩色的图片来说,直方图均衡化一般不能直接对R、G、B三个分量分别进行上述的操作,而要将RGB转换成HSV来对V分量进行直方图均衡化的操作。浮雕效果就是将图像的变化部分突出显示,颜色相同部分淡化处理,使图像出现浮雕效果。实现图像浮雕效果的一般原理是,将图像上每个像素点与其对角线的像素点形成差值,使相似颜色值淡化,不同颜色值突出,从而产生纵深感,达到浮雕的效果,具体的做法是用处于对角线的2个像素值相减,再加上一个背景常数,一般为128而成。这样颜色变化大
4、的地方色彩就明显,颜色变化小的地方因为差值几乎为零则成黑色。主要代码分析:直方图均衡化:inti,j,k,max=0,min=0;intn[256]={0};//n[i]灰度值为i的像素的个数floatp[256]={0.0};//p[i]灰度为i的像素个数的归一化floatc[256]={0.0};//c[i]灰度为i的像素个数的累积归一化for(i=0;i5、++)//归一化直方图{p[i]=(float)n[i]/(nw*nh);}for(i=0;i<256;i++)//累积归一化直方图for(j=0;j<=i;j++){c[i]+=p[j];}for(i=0;i=m_dib.m_pdata[i*nw+j])min=m_dib.m_pdata[i*nw+j];}}for(i=0;i6、i++)//直方图均衡化{for(j=0;j=0;j--){m_dib.m_pdata[i*nw+j]-=m_dib.m_pdata[(i+1)*nw+j-17、];}m_dib.UpdateData();//将修改的m_pdata的数据赋值给m_pDIBData,显示修改的结果Invalidate();//刷新屏幕}向上平移:inti,j;intoffset=5;//偏移量for(i=(nh-1);i>offset;i--)for(j=0;j=0;i--)for(j=0;j8、}m_dib.UpdateData();//将修改的m_pdata的数据赋值给m_pDIBData,显示修改的结果//刷新屏幕Invalidate();}向下平移:inti,j;
5、++)//归一化直方图{p[i]=(float)n[i]/(nw*nh);}for(i=0;i<256;i++)//累积归一化直方图for(j=0;j<=i;j++){c[i]+=p[j];}for(i=0;i=m_dib.m_pdata[i*nw+j])min=m_dib.m_pdata[i*nw+j];}}for(i=0;i6、i++)//直方图均衡化{for(j=0;j=0;j--){m_dib.m_pdata[i*nw+j]-=m_dib.m_pdata[(i+1)*nw+j-17、];}m_dib.UpdateData();//将修改的m_pdata的数据赋值给m_pDIBData,显示修改的结果Invalidate();//刷新屏幕}向上平移:inti,j;intoffset=5;//偏移量for(i=(nh-1);i>offset;i--)for(j=0;j=0;i--)for(j=0;j8、}m_dib.UpdateData();//将修改的m_pdata的数据赋值给m_pDIBData,显示修改的结果//刷新屏幕Invalidate();}向下平移:inti,j;
6、i++)//直方图均衡化{for(j=0;j=0;j--){m_dib.m_pdata[i*nw+j]-=m_dib.m_pdata[(i+1)*nw+j-1
7、];}m_dib.UpdateData();//将修改的m_pdata的数据赋值给m_pDIBData,显示修改的结果Invalidate();//刷新屏幕}向上平移:inti,j;intoffset=5;//偏移量for(i=(nh-1);i>offset;i--)for(j=0;j=0;i--)for(j=0;j8、}m_dib.UpdateData();//将修改的m_pdata的数据赋值给m_pDIBData,显示修改的结果//刷新屏幕Invalidate();}向下平移:inti,j;
8、}m_dib.UpdateData();//将修改的m_pdata的数据赋值给m_pDIBData,显示修改的结果//刷新屏幕Invalidate();}向下平移:inti,j;
此文档下载收益归作者所有