C 實現Matlab的psf2otf函式

2021-07-05 18:13:32 字數 1274 閱讀 1885

最近在用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成功發展的關鍵要素。在混亂的時期,各家企業的利益和戰略意圖摻雜在本身就很複雜...