基於C 的psf2otf實現

2021-08-31 16:03:54 字數 1520 閱讀 2572

為確保因psf偏心而不改變otf,psf2otf將psf陣列(向下或向右)字尾為0匹配outsize中指定的尺寸,然後迴圈移動

psf陣列的值向上(或向左)直到中心畫素到達(1,1)位置。

(1)c++實現原始碼

//實現fft變換

mat psf2otf(mat psf, size size)

; mat complexi;

//建立dft所需要的引數

merge(planes, 2, complexi);

//進行dft計算

dft(complexi, complexi);

//獲取計算結果

otf = complexi;

//返回使用者定義的結果

return otf(range(0, size.height), range(0, size.width));

}

(2)matlb實現原始碼

[psf, psfsize, outsize] = parseinputs(varargin);

if ~all(psf(:)==0),

% pad the psf to outsize

padsize = outsize - psfsize;

psf = padarray(psf, padsize, 'post');

% circularly shift otf so that the "center" of the psf is at the

% (1,1) element of the array.

psf = circshift(psf,-floor(psfsize/2));

% compute the otf

otf = fftn(psf);

% estimate the rough number of operations involved in the

% computation of the fft.

nelem = prod(psfsize);

nops = 0;

for k=1:ndims(psf)

nffts = nelem/psfsize(k);

nops = nops + psfsize(k)*log2(psfsize(k))*nffts;

end% discard the imaginary part of the psf if it's within roundoff error.

if max(abs(imag(otf(:))))/max(abs(otf(:))) <= nops*eps

otf = real(otf);

endelse

otf = zeros(outsize);

end

opencv中傅利葉變換輸出有兩種格式 全複數輸出(full-complex output,占用兩個矩陣大小)和複數共軛對稱壓縮輸出(complex conjugate symmetric (ccs) packed output,乙個矩陣大小) 。

C 實現Matlab的psf2otf函式

最近在用c 實現l0smooth的 其中裡面用到了psf2otf這個函式,但是opencv沒有,因此我自寫了乙個。關於這個函式的介紹,你可以參考matlab的官方文件及其源 也可以參考這裡寫的乙個記錄,這裡不做過多介紹了。filename filter.cpp version 0.10 author...

基於 C 的 SQL Parser 實現

乙個函式,可以提取sql語句中查詢字段部分。雖然函式中使用了block,但是block可以很方便的轉換成純 c 的函式,而且未來 block 也很有可能成為 c 標準。import typedef struct field field const field emptyfield static in...

用C 實現基於用C 實現基於TCP協議的網路通訊

tcp 協議是乙個基本的網路 協議,基本上所有的網路服務都是基於 tcp協議的,如http,ftp等等,所以要了解網路程式設計就必須了解基於 tcp協議的程式設計。然而 tcp協議是乙個龐雜的體系,要徹底的弄清楚它的實現不是一天兩天的功夫,所幸的是在.net framework環境下,我們不必要去追...