為確保因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環境下,我們不必要去追...