0
這是我的問題:我試圖創建一個簡單的程序,它將高斯噪聲添加到輸入圖像。唯一的限制是,該輸入圖像是類型CV_64F的(即雙),值是與0和1OpenCV - 高斯噪聲
我寫的代碼之間必須保持歸一化在下列:
Mat my_noise;
my_ noise = Mat (input.size(), input.type());
randn(noise, 0, 5); //mean and variance
input += noise;
的上面的代碼不起作用,結果圖像不能正確顯示。我認爲這是因爲它超出了0,1範圍。我修改了這樣的代碼:
Mat my_noise;
my_ noise = Mat (input.size(), input.type());
randn(noise, 0, 5); //mean and variance
input += noise;
normalize(input, input, 0.0, 1.0, CV_MINMAX, CV_64F);
但它仍然不起作用。同樣,生成的圖像不能正確顯示。哪裏有問題?記住:輸入圖像的類型是CV_64F,並且在添加噪聲之前將值在0和1之間標準化,並且在噪聲添加之後必須保持原樣。
預先感謝您。
非常感謝您的幫助。你的代碼工作,我只需要對彩色圖像進行一些小調整。我沒有使用clamp_1和clamp_0,而是將其改爲: input = cv :: max(input,0); input = cv :: min(input,1); ,因爲當第二個參數是標量時,最小和最大比較是按每個通道完成的。 我不確定我的第一部分解釋是否正確,對不起。如果我們試圖限制高斯(例如在0,1中),我們不再從高斯分佈中獲取隨機數。另一方面,爲什麼我們不能在添加噪聲後對結果進行歸一化? – user3438376
實際上,通過將方差改變爲更小的值,如果我使用我在第一篇文章(具有規格化線的文章)中編寫的代碼的第二版本,則圖像實際上會顯示,只是它看起來更暗。怎麼了? – user3438376
@ user3438376認爲你有一個像素只有4個像素= [1 0.8 0.0 0.2]。現在假設我們將噪聲添加到圖像中的一個像素,因此它是[1 2 0.4 0.2]。然後,當圖像標準化時,你會得到[0.5 1 0.2 0.1],圖像較暗。很顯然,這是一個有人設想的案例,它更容易讓圖片變得更輕。將會發生什麼將很大程度上取決於圖像是什麼 - 輕微的圖像會變得更暗,而黑色的圖像會變得更輕。 – Bull