我撰寫了以下 matlab 代碼來生成被柯西噪聲破壞的噪聲影像,但是當我在 matlab 中使用 psnr 函式計算噪聲影像的 psnr 值時,它回傳一個負值,而根據我已經實作其結果的論文,大小為 256 x 256 和 0.02 柯西噪聲的攝影師測驗影像的 psnr 值必須在 19 左右。如果有人可以幫助我解決這個問題,我將不勝感激。
refimg = im2double(imread('cameraman.png')); % original image
img_height = size(refimg,1);
img_width = size(refimg,2);
refimg = refimg(1:img_height,1:img_width);
rng(0);
r1 = random('Normal',0, 1,[img_height img_width]);
r2 = random('Normal',0, 1,[img_height img_width]);
n = 0.02; % the noise level
u0 = refimg n.*(r1./r2);
figure(1); imshow(u0);
PSNR_noisy = psnr(refimg,u0)
uj5u.com熱心網友回復:
該psnr函式以分貝(即對數單位)輸出信噪比。這在檔案中有說明(但我認為應該更清楚地說明,也許在說明部分)。此外,快速查看psnr的代碼可以確認輸出以分貝為單位:
peaksnr = 10*log10(peakval.^2/err);
snr = 10*log10(mean(ref(:).^2)/err);
因此,結果可能是否定的,這意味著噪聲功率大于信號功率。
但是請注意,噪聲功率的概念不能應用于柯西分布。所以我不確定psnr在這種情況下使用是否有意義。
uj5u.com熱心網友回復:
正如Luis Mendo 所說的那樣,您無法計算從柯西分布中提取的噪聲功率。這是因為分布沒有均值或方差。您可以從此分布中獲得無限大(或小)的值。因為分布是無界的,所以作為影像的噪聲模型沒有意義。但是,如果我們在應用噪聲后鉗制影像的值,那么我們將能夠合理地計算統計資料。
這是 OP 的代碼,稍微簡化和修改以在添加噪聲后將影像值限制在 [0,1] 范圍內:
refimg = im2double(imread('cameraman.tif')); % original image
sz = size(refimg);
rng(0);
r1 = randn(sz); % (using randn because I don't have the statistics toolbox)
r2 = randn(sz);
n = 0.02; % the noise level
u0 = refimg n.*(r1./r2);
u0 = min(u0,1); % clamp large values to 1
u0 = max(u0,0); % clamp small values to 0
PSNR_noisy = psnr(u0,refimg)
現在的輸出是 19.1419。
請注意,該函式psnr希望參考影像是第二個輸入,即使在這種情況下開關不會影響輸出。
請在此處閱讀我對使用 PSNR 的意見:https : //www.crisluengo.net/archives/490/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/352466.html
上一篇:多選ListView沒有回應
