生活随笔
收集整理的這篇文章主要介紹了
图像低频高频区域分离
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介
本篇整理記錄利用小波分離圖像的高頻、低頻部分信息。
具體實現
實現代碼參考資料:小波變換 C++ opencv 實現。
小波變換
小波生成和參考資料中一致。小波變換中,首先抽取出原圖像的每一行,進行小波分解,獲得水平方向的高、低頻信息。
接著抽取出原圖像的每一列,進行小波分解,獲得垂直方向的高、低頻信息。生成的對應結果如下:
水平方向 垂直方向
區域分離
如上,我們已經獲得了水平、垂直方向的高、低頻信息,并保存到了圖像中。接著我們首先將這兩幅圖片都疊加到同一副圖像中。
結果開運算、高斯濾波和閥值二值化之后,最終獲得比較好的分離掩碼結果。對應代碼如下:
[cpp] view plain
copy void?picDone(Mat?mat1,?Mat?mat2){??????int?i,?j;??????IplImage?tmp;??????CvScalar?s;??????float?sum?=?0;?????????mat2.copyTo(mask);?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????tmp?=?mask;??????for(i=0;?i<?mat2.rows;?i++){??????????for(j=0;?j<?mat2.cols;?j++){??????????????mask.at<float>(i,j)?=?(mat1.at<float>(i,j)?+?mat2.at<float>(i,j))?/?2;??????????????if((i==0)?&&?(j==0)){??????????????????sum?=?mask.at<float>(i,j);????????????????}else{??????????????????sum?=?(sum?+?mask.at<float>(i,j))?/?2;??????????????}??????????}?????????}??????tmp?=?mat2;??????cvZero(&tmp);?????????imshow("mask0",?mask);??????morphologyEx(mask,?mat2,?MORPH_CLOSE,?Mat(5,5,CV_8U),?Point(-1,-1),?1);??????GaussianBlur(mat2,?mask,?Size(7,7),?0,?0);?????????tmp?=?mask;??????for(i=0;?i<?mask.rows;?i++){??????????for(j=0;?j<?mask.cols;?j++){??????????????s?=?cvGet2D(&tmp,?i,?j);??????????????if(s.val[0]?<?sum){??????????????????s.val[0]?=?0;??????????????????cvSet2D(&tmp,?i,?j,?s);??????????????}??????????}??????}??????imshow("mask",?mask);??}??
對應的結果顯示如下:
直接疊加 后處理結果
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的图像低频高频区域分离的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。