OpenCV : homomorphic filter

后端 未结 2 1384
没有蜡笔的小新
没有蜡笔的小新 2021-01-13 15:59

i want to use a homomorphic filter to work on underwater image. I tried to code it with the codes found on the internet but i have always a black image... I tried to normali

2条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-13 16:34

    I was doing this method to balance illumination when camera was changed caused the Image waw dark!

    I tried to FFT to the frequency to filter the image! it's work.but use too much time.(2750*3680RGB image).so I do it in Spatial domain.

    here is my code!

    //IplImage *imgSrcI=cvLoadImage("E:\\lean.jpg",-1);
    Mat imgSrcM(imgSrc,true);
    Mat imgDstM;
    
    Mat imgGray;
    Mat imgHls;
    vector vHls;
    
    Mat imgTemp1=Mat::zeros(imgSrcM.size(),CV_64FC1);
    Mat imgTemp2=Mat::zeros(imgSrcM.size(),CV_64FC1);
    
    if(imgSrcM.channels()==1)
    {
        imgGray=imgSrcM.clone();
    }
    else if (imgSrcM.channels()==3)
    {
        cvtColor(imgSrcM, imgHls, CV_BGR2HLS);
        split(imgHls, vHls);
        imgGray=vHls.at(1);
    }
    else
    {
        return -1;
    }
    imgGray.convertTo(imgTemp1,CV_64FC1);
    imgTemp1=imgTemp1+0.0001;
    log(imgTemp1,imgTemp1);
    
    GaussianBlur(imgTemp1, imgTemp2, Size(21, 21), 0.1, 0.1, BORDER_DEFAULT);//imgTemp2是低通滤波的结果
    imgTemp1 = (imgTemp1 - imgTemp2);//imgTemp1是对数减低通的高通
    addWeighted(imgTemp2, 0.7, imgTemp1, 1.4, 1, imgTemp1, -1);//imgTemp1是压制低频增强高频的结构
    
    exp(imgTemp1,imgTemp1);
    normalize(imgTemp1,imgTemp1,0,1,NORM_MINMAX);
    imgTemp1=imgTemp1*255;
    
    imgTemp1.convertTo(imgGray, CV_8UC1);
    
    //imwrite("E:\\leanImgGray.jpg",imgGray);
    if (imgSrcM.channels()==3)
    {
        vHls.at(1)=imgGray;
        merge(vHls,imgHls);
        cvtColor(imgHls, imgDstM, CV_HLS2BGR);
    
    }
    else if (imgSrcM.channels()==1)
    {
        imgDstM=imgGray.clone();
    }
    
    cvCopy(&(IplImage)imgDstM,imgDst);
    //cvShowImage("jpg",imgDst);
    
    return 0;
    

提交回复
热议问题