• 大小: 3KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: C/C++
  • 标签: 维纳滤波  opencv  

资源简介

用opencv编写的维纳滤波器 实现图像去噪和图像恢复

资源截图

代码片段和文件信息

#include“weina.h“



void weina(IplImage *dstGIplImage *dstW)
{
     double k=0.01;           //winer滤波加权系数
     double R=5;              //散焦退化函数散焦斑半径

     int width =dstG->width; //读取图像宽度 
  int height = dstG->height; //读取图像高度

 // 获取傅立叶变换的最佳尺寸(大于等于原先尺寸)
    int dft_h = dstG->height;
    int dft_w = dstG->width ;

 //获取退化函数h
 double *h=(double *)malloc(sizeof(double)*width*height);
     memset(h0height*width);
     CvMat* image_hre = cvCreateMat( height width CV_32FC1 );
     for(int i=0;i  for(int j=0;j  {
 double t=pow(1.0*i2)+pow(1.0*j2);
 if(t                h[j*width+i]=1.0/(3.14*R*R);
 else
                h[j*width+i]=0;
             image_hre->data.fl[j*image_hre->cols+i]=h[j*width+i];
 }

  //对退化函数h进行傅里叶变换
    CvMat* image_him = cvCreateMat( dft_hdft_w CV_32FC1);
CvMat* image_Cp = cvCreateMat( dft_h dft_w CV_32FC2);
    CvMat* image_dst = cvCreateMat( dft_h dft_w CV_32FC2);
    cvZero( image_him );
    cvMerge( image_hre image_him NULL NULL image_Cp );
    cvDFT( image_Cp image_dst CV_DXT_FORWARD dstG->height );
    cvSplit( image_dst image_hre image_him 0 0 );
   


    //得到模糊图像g的傅里叶变换
    CvMat* image_gre = cvCreateMat( dft_hdft_wCV_32FC1);
    CvMat* i

评论

共有 条评论