最近在用c++實現l0smooth的**,其中裡面用到了psf2otf這個函式,但是opencv沒有,因此我自寫了乙個。
關於這個函式的介紹,你可以參考matlab的官方文件及其源**,也可以參考這裡寫的乙個記錄,這裡不做過多介紹了。
///
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
/////
/** * filename : filter.cpp
* version : 0.10
* author : wincoder
* date : 2015-10-11 10:22:21
* comment : implenment matlab psf2osf function.
*/mat psf2otf(mat psf, size size)
; mat complexi;
merge(planes, 2, complexi);
dft(complexi, complexi);
otf = complexi;
return otf(range(0,size.height),range(0,size.width));
}
這個程式使用了opencv庫,我使用的版本是opencv300,其他版本也是可以的。
程式是先將矩陣填充到輸出大小,然後將原始psf的中心移動到左上角,matlab中psf2otf函式中使用了circshift函式(可以檢視其源**),opencv好像沒有這個函式,這裡我就直接將矩陣分成四個象限,然後將1和3象限對調,2和4象限對調。
值得說明的是opencv中傅利葉變換輸出有兩種格式 全複數輸出(full-complex output,占用兩個矩陣大小)和複數共軛對稱壓縮輸出(complex conjugate symmetric (ccs) packed output,乙個矩陣大小) 。為了生活保持簡單和美好,我個人偏向於全複數格式輸出,關於 ccs 格式說明見opencv官文dft。
測試了幾個例子,**正確。
matlab中psf2otf.m原始碼
作者日期
****
風吹夏天
2023年10月11日
wincoder#qq.com
基於C 的psf2otf實現
為確保因psf偏心而不改變otf,psf2otf將psf陣列 向下或向右 字尾為0匹配outsize中指定的尺寸,然後迴圈移動 psf陣列的值向上 或向左 直到中心畫素到達 1,1 位置。1 c 實現原始碼 實現fft變換 mat psf2otf mat psf,size size mat comp...
C 實現Matlab的fft2函式
這篇是 c 實現matlab的psf2otf函式 的姊妹篇,屬於基礎工具類 用途比較多。這裡還是使用opencv實現。關於這個函式的介紹,做過影象處理的人都知道,可以參考matlab的官方文件及其源 filename filter.cpp version 0.10 author wincoder d...
對傳統企業 實現O2O的核心就是大資料
文章講的是對傳統企業 實現o2o的核心就是大資料,目前,網媒及各種論壇充斥著各種o2o的流派聲音 解決方案和案例分析。各類專家樂此不疲地追蹤幾大網際網路豪門的技術動態和市場動向,期望從各類紛繁複雜的企業 試錯 中,找到o2o成功發展的關鍵要素。在混亂的時期,各家企業的利益和戰略意圖摻雜在本身就很複雜...