Advertisement

本科课程【数字图像处理】实验2 - 图像增强

阅读量:

1+1=王

课程设计实验报告

1+1=王

一、 实验目的

1、学习并编写均值滤波算法的代码。
2、学习并编写中值滤波算法的代码,在图像上添加高斯噪声后应用中值滤波以去除噪声。
3、学习并编写拉普拉斯锐化算法的代码。

二、 实验内容

1. 实验任务

在程序设计阶段,在各个函数模块分别配置相应的算法代码块,并完成均值滤波、中值滤波及拉普拉斯锐化算法的应用。随后通过 MISS 图片评估这三种算法的性能表现。

2. 程序设计

1) 原理
(1) 均值滤波也称为领域平均法,是一种图像平滑算法,图像平滑是指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度,改善图像质量的图像处理方法。可以用加权平均或者非加权平均。
(2) 中值滤波,原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。
(3) 图像锐化处理的目的是为了使图像的边缘、 轮廓线以及图像的细节变的清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如 微分运算)就可以使图像变的清晰。

(1)依次启动VC++6.0、工作空间及项目文件。
(2)创建一个新的存储空间lpSrc用于平滑后的图像处理;将源图像的像素领域分别与a[i]进行乘法运算以实现加权或非加权效果得到目标图像的像素值。
(3)完善并补充GetMedianNum函数代码;在此基础上实现中值滤波功能:通过排序源图像像素及其领域得到中间值作为输出;完成中值滤波函数后,在相应位置添加中值滤波代码。
(4)图像锐化操作与平滑相似但无需进行加权或非加权处理由于其系数总和恒定为1。

3) 数据输出

在这里插入图片描述

分析:通过柔和处理宽大区域的低频信息以及主体部分的数据来增强其清晰度,并减少高频噪声和干扰;这种方法可以使亮度变化趋于平缓渐进,在降低对比度突变的同时提升整体视觉效果。

在这里插入图片描述

分析:该方法能够有效地去除图片中的噪声;然而,在图像的拐角区域无法有效去除噪声,因为这些区域占据的比例较大。

在这里插入图片描述
在这里插入图片描述

分析表明,在执行图像平滑处理后紧接着实施图像锐化操作。最初阶段的图像锐化处理显著提升了边缘细节的质量。随后继续这一过程将导致模糊区域出现明显的块状模糊现象。

三、 实验环境

  1. 操作系统:WINDOWS 8
  2. 开发工具:Visual Studio、
  3. 实验设备:PC

源代码

均值滤波:

复制代码
    double *tempt=new double[lWidth*lHeight];
    	int *b=new int[9];
    	int k;
    	double sum,mean;
    	for(i=1;i<lHeight-1;i++)
    	{
    		for(j=1;j<lWidth-1;j++)
    		{
    			lpSrc=lpDIBBits+lLineBytes*i+j;
    			b[0]=*(lpDIBBits+lLineBytes*(i-1)+j-1);
    			b[1]=*(lpDIBBits+lLineBytes*(i-1)+j);
    			b[2]=*(lpDIBBits+lLineBytes*(i-1)+j+1);
    			b[3]=*(lpDIBBits+lLineBytes*i+j-1);
    			b[5]=*(lpDIBBits+lLineBytes*i+j);
    			b[6]=*(lpDIBBits+lLineBytes*(i+1)+j-1);
    			b[7]=*(lpDIBBits+lLineBytes*(i+1)+j);
    			b[8]=*(lpDIBBits+lLineBytes*(i+1)+j+1);
    			sum=0;
    			mean=0;
    			for(k=0;k<9;k++)
    			{
    				sum=sum+a[k]*b[k];
    				mean=sum/9;
    			}
    			tempt[lWidth*i+j]=mean;
    		}
    	}
    	for(i=1;i<lHeight-1;i++)
    	{
    		for(j=1;j<lWidth-1;j++)
    		{
    			lpSrc=lpDIBBits+lLineBytes*i+j;
    			if(tempt[lWidth*i+j]>255)
    			{
    				*lpSrc=(unsigned char)255;
    			}
    			else if(tempt[lWidth*i+j]<0)
    			{
    				*lpSrc=(unsigned char)0;
    			}
    			else
    			{
    				*lpSrc=(unsigned char)tempt[lWidth*i+j];
    			}
    		}
    	}
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

中值滤波:

复制代码
    int *tempt=new int[lWidth*lHeight];
    	unsigned char *b=new unsigned char[9];
    	for(i=1;i<lHeight-1;i++)
    	{
    		for(j=1;j<lWidth-1;j++)
    		{
    			lpSrc=lpDIBBits+lLineBytes*i+j;
    			b[0]=*(lpDIBBits+lLineBytes*(i-1)+j-1);
    			b[1]=*(lpDIBBits+lLineBytes*(i-1)+j);
    			b[2]=*(lpDIBBits+lLineBytes*(i-1)+j+1);
    			b[3]=*(lpDIBBits+lLineBytes*i+j-1);
    			b[5]=*(lpDIBBits+lLineBytes*i+j);
    			b[6]=*(lpDIBBits+lLineBytes*(i+1)+j-1);
    			b[7]=*(lpDIBBits+lLineBytes*(i+1)+j);
    			b[8]=*(lpDIBBits+lLineBytes*(i+1)+j+1);
    			tempt[lWidth*i+j]=GetMedianNum(b,9);
    		}
    	}
    	for(i=1;i<lHeight-1;i++)
    	{
    		for(j=1;j<lWidth-1;j++)
    		{
    			lpSrc=lpDIBBits+lLineBytes*i+j;
    			if(tempt[lWidth*i+j]>255)
    			{
    				*lpSrc=(unsigned char)255;
    			}
    			else if(tempt[lWidth*i+j]<0)
    			{
    				*lpSrc=(unsigned char)0;
    			}
    			else
    			{
    				*lpSrc=(unsigned char)tempt[lWidth*i+j];
    			}
    		}
    	}
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

锐化:

复制代码
    double *tempt=new double[lWidth*lHeight];
    	int *b=new int[9];
    	int k;
    	double sum;
    	for(i=1;i<lHeight-1;i++)
    	{
    		for(j=1;j<lWidth-1;j++)
    		{
    			lpSrc=lpDIBBits+lLineBytes*i+j;
    			b[0]=*(lpDIBBits+lLineBytes*(i-1)+j-1);
    			b[1]=*(lpDIBBits+lLineBytes*(i-1)+j);
    			b[2]=*(lpDIBBits+lLineBytes*(i-1)+j+1);
    			b[3]=*(lpDIBBits+lLineBytes*i+j-1);
    			b[5]=*(lpDIBBits+lLineBytes*i+j);
    			b[6]=*(lpDIBBits+lLineBytes*(i+1)+j-1);
    			b[7]=*(lpDIBBits+lLineBytes*(i+1)+j);
    			b[8]=*(lpDIBBits+lLineBytes*(i+1)+j+1);
    			sum=0;
    			for(k=0;k<9;k++)
    			{
    				sum=sum+a[k]*b[k];
    			}
    			tempt[lWidth*i+j]=sum;
    		}
    	}
    	for(i=1;i<lHeight-1;i++)
    	{
    		for(j=1;j<lWidth-1;j++)
    		{
    			lpSrc=lpDIBBits+lLineBytes*i+j;
    			if(tempt[lWidth*i+j]>255)
    			{
    				*lpSrc=(unsigned char)255;
    			}
    			else if(tempt[lWidth*i+j]<0)
    			{
    				*lpSrc=(unsigned char)0;
    			}
    			else
    			{
    				*lpSrc=(unsigned char)tempt[lWidth*i+j];
    			}
    		}
    	}
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

课程设计实验报告

课程设计实验报告

课程设计实验报告

课程设计实验报告

全部评论 (0)

还没有任何评论哟~