ImageNoise使用說明
本代碼是利用圖片疊加的原理消除噪聲的實驗代碼
Github
原理
原理說明
圖像的加法可用于平均以減少和去除圖像采集中混入的噪聲徙邻,在采集中實際圖像的時候始腾,由于各種不同的原因,常會有一些干擾或噪聲混入到最后采集的圖像中确憨。從這個意義上來說鄙信,實際采集到的圖像g_i (x,y可看做是由原始場景圖像f(x,y)和噪聲圖像疊加而成的瞪醋,即
g(x,y)=f(x,y)+ε(x,y)
圖像的加法可用于平均以減少和去除圖像采集中混入的噪聲,在采集中實際圖像的時候装诡,由于各種不同的原因银受,常會有一些干擾或噪聲混入到最后采集的圖像中践盼。從這個意義上來說,實際采集到的圖像g_i (x,y可看做是由原始場景圖像f(x,y)和噪聲圖像疊加而成的宾巍,即
g(x,y)=f(x,y)+ε(x,y)
那么可以證明新的圖像的期望值為
E{ˉg(x,y)}=f(x,y)
如果考慮新圖像和噪聲圖像各自的均方差的關(guān)系咕幻,則
σ(ˉg(x,y))=√(1/M)×σ(e(x,y))
可見隨著平均圖像數(shù)量M的增加,噪聲在每個像素的位置(x,y)的影響越來越小
#include <cstdlib>
#include <cmath>
#include <limits>
double generateGaussianNoise(double mu, double sigma)
{
const double epsilon = std::numeric_limits<double>::min();
const double two_pi = 2.0*3.14159265358979323846;
static double z0, z1;
static bool generate;
generate = !generate;
if (!generate)
return z1 * sigma + mu;
double u1, u2;
do
{
u1 = rand() * (1.0 / RAND_MAX);
u2 = rand() * (1.0 / RAND_MAX);
}
while ( u1 <= epsilon );
z0 = sqrt(-2.0 * log(u1)) * cos(two_pi * u2);
z1 = sqrt(-2.0 * log(u1)) * sin(two_pi * u2);
return z0 * sigma + mu;
}
使用說明
下載源碼
命令行切換到打開build目錄
-
輸入
ImageNoise.exe image.jpg 40
(第二個參數(shù)為圖片名稱顶霞,第三個參數(shù)為加噪圖片數(shù)量)
-
目錄下會生成一個output40.jpg的文件即為輸出文件
原始圖片
加噪圖片
結(jié)果圖片