图像增强和还原

电子科技大学 格拉斯哥学院 2017级 汪宗伟 2017200602010
目录
1.问题
2.分析
3.具体解决方法
问题
在现实社会中对于图片进行传输,而在这途中经常会出现压缩图片的情况出现,因此我们最后得到的图片就会不如之前拍摄或者要表达的清晰而导致一系列的误解或不适。对于压缩后的图片是否可以通过某种技术或者算法来增强图片的质量,提高它的分辨率。

在获得图像过程中因各种原因产生会退化,摄像系统与被摄物之间的相对运动、电子或光学系统的噪声和介于摄像系统与被摄像物间的大气湍流等都将导致图像的退化。对于退化的图像可否进行一系列的处理,然后在观测到的退化图像中通过检测原始图像而复原图像
分析
图像增强可分成两大类:频率域法和空间域法。
前者把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。采用低通滤波(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模糊的图片变得清晰。
后者空间域法中具有代表性的算法有局部求平均值法和中值滤波(取局部邻域中的中间像素值)法等,它们可用于去除或减弱噪声。
图像复原技术的基础应该是图像退化的数学模型,不同成像系统具有的图像退化模型是不相同的。
当对于原始图像缺乏必需的先验知识时,我们可以采用就退化过程建立一个模型,首先对其进行一个大概的描述,然后在复原的过程根据具体的情况进行逐步合理的修正,逐步消除误差影响。这种方法建立在对图像的退化过程进行合理的估计的基础之上,从这个角度来看它是一种估计的方法。
具体处理方法
1.对数图像增强算法
对数图像增强是图像增强的一种常见方法,其公式为: S = c log(r+1),其中c是常数(以下算法c=255/(log(256)),这样可以实现整个画面的亮度增大。

void LogEnhance(IplImage* img, IplImage* dst) 
{  
 // 由于oldPixel:[1,256],则可以先保存一个查找表  
  uchar lut[256] ={0};  
  double temp = 255/log(256);  
  for ( int i =0; i<255; i++)  
   { 
       lut[i] = (uchar)(temp* log(i+1)+0.5);  
       }
       for( int row =0; row height; row++) 
            {          
            uchar *data = (uchar*)img->imageData+ row* img->widthStep; 
            uchar *dstData = (uchar*)dst->imageData+ row* dst->widthStep; 
            for ( int col = 0; colwidth; col++) 
                     {  
                      for( int k=0; knChannels; k++) 
                                   {  
                                    uchar t1 = data[col*img->nChannels+k];  
                                     dstData[col*img->nChannels+k] = lut[t1];  
                                     }
                                     }
                                     }
                                     }

2.加马赛克算法
在日常中有时候保密或其他需要将图像马赛克,下面的算法实现图像马赛克功能(原理:用中心像素来表示邻域像素)。

uchar getPixel( IplImage* img, int row, int col, int k)
  {     
   return ((uchar*)img->imageData + row* img->widthStep)[col*img->nChannels +k];
     }    
     void setPixel( IplImage* img, int row, int col, int k, uchar val)
       {      
       ((uchar*)img->imageData + row* img->widthStep)[col*img->nChannels +k] = val; 
        }  
// nSize:为尺寸大小,奇数 
 // 将邻域的值用中心像素的值替换  
 void Masic(IplImage* img, IplImage* dst, int nSize)
   {     
    int offset = (nSize-1)/2;     
     for ( int row = offset; row height - offset; row= row+offset) 
          {         
           for( int col= offset; colwidth - offset; col = col+offset) 
                    {             
                     int val0 = getPixel(img, row, col, 0); 
                     int val1 = getPixel(img, row, col, 1);
                     int val2 = getPixel(img, row, col, 2); 
                     for ( int m= -offset; m

3.图像复原方法
图像复原的过程主要是通过如维纳滤波法等数学方法通过计算机计算进行复原。
在该博客中有详细描述,在此不加赘述。

https://blog.csdn.net/u013498580/article/details/80084049

你可能感兴趣的:(图像增强和还原)