图像算法原理与实践——图像复原之噪声模型
点击下方卡片,关注“新机器视觉”公众号
视觉/图像重磅干货,第一时间送达
图像退化是指图像的质量下降。退化的形式有 模糊、失真、有噪声等,无论是由光学、光电或电子方法获得的图像都会有不同程度的退化,退化的形式和原因也多种多样,例如:摄像头采样单元本身的精度导致高斯噪点、拍摄时手持的抖动或者聚焦不对造成模糊、镜头畸变导致的失真等等。本章节主要讲解图像退化的原因和一些模型。
图像退化模型
![](https://filescdn.proginn.com/ab1a72bbfa5ba12232221e79fa2fc167/adcedb8dd87e00d842cac0a52a16a99a.webp)
![](https://filescdn.proginn.com/c962c584d6b8f8d0baddb2a0c73201b2/86c99131ca0f5174a704947c4e3ca346.webp)
![](https://filescdn.proginn.com/36e1473a88495352716bc18ddf4d7871/f9ce8eb2301798ed2dc93f4158228a47.webp)
![](https://filescdn.proginn.com/0d486ccf34a09705d732594d9ff4a63f/3a908f4a8db633e44c6d0488cd4ef01d.webp)
![](https://filescdn.proginn.com/8ff6e8be2b8c5d7a3a46bf404cc7dac8/828bcde0a1aa3be2b944e3c3f6fe0d5d.webp)
![](https://filescdn.proginn.com/68dac1eb300f1caafbf5c36d4624e0b9/ae5e5c6cbebc614072ad170534b9b738.webp)
![](https://filescdn.proginn.com/36e1473a88495352716bc18ddf4d7871/f9ce8eb2301798ed2dc93f4158228a47.webp)
![](https://filescdn.proginn.com/0d486ccf34a09705d732594d9ff4a63f/3a908f4a8db633e44c6d0488cd4ef01d.webp)
常见噪声模型
高斯噪声
![](https://filescdn.proginn.com/204cf11ad06b27ce3f47b509ccb0165a/dce28971dd1aba2130a30f8954921f49.webp)
![](https://filescdn.proginn.com/570758eb24d47f4a0f8c0b7e5b9d08fa/f66283af56f50db2b1cef1126a4a633c.webp)
//
// 计算单个高斯噪声
//
double_t XImage::CalculateGaussNoise(double_t mu, double_t sigma, int32_t k)
{
static double_t V1, V2, S;
static int32_t phase = 0;
double_t X;
double_t U1,U2;
if ( phase == 0 ) {
do {
U1 = (double_t)rand() / RAND_MAX;
U2 = (double_t)rand() / RAND_MAX;
V1 = 2 * U1 - 1;
V2 = 2 * U2 - 1;
S = V1 * V1 + V2 * V2;
} while(S >= 1 || S == 0);
X = V1 * sqrt(-2 * log(S) / S);
} else{
X = V2 * sqrt(-2 * log(S) / S);
}
phase = 1 - phase;
return (mu+sigma*X) * k;
}
//
// 图像增加高斯噪声
//
int32_t XImage::NoiseGauss(double_t mu, double_t sigma, int32_t k,
XImage& out_img)
{
if (!image_valid_) {
return XERR_BAD_STATE;
}
if (!IsSameParameter(out_img))
{
out_img.Release( );
out_img.Allocate(pxl_format_, width_, height_);
}
uint8_t* src_line = image_data_;
uint8_t* dst_line = out_img.image_data_;
int32_t x, y;
if (1 == pixel_bytes_)
{
for (y = 0; y < height_; y++)
{
uint8_t* src_data = src_line;
uint8_t* dst_data = dst_line;
for (x = 0; x < width_; x++)
{
double_t noise = CalculateGaussNoise(mu, sigma, k);
double_t gray = src_data[0] + noise;
gray = MIN(MAX(gray, 0.0), 255.0);
dst_data[0] = static_cast<uint8_t>(gray);
src_data += pixel_bytes_;
dst_data += pixel_bytes_;
}
src_line += line_bytes_;
dst_line += line_bytes_;
}
}
else
{
for (y = 0; y < height_; y++)
{
uint8_t* src_data = src_line;
uint8_t* dst_data = dst_line;
for (x = 0; x < width_; x++)
{
double_t noise = CalculateGaussNoise(mu, sigma, k);
double_t b = src_data[0] + noise;
double_t g = src_data[1] + noise;
double_t r = src_data[2] + noise;
b = MIN(MAX(b, 0.0), 255.0);
g = MIN(MAX(g, 0.0), 255.0);
r = MIN(MAX(r, 0.0), 255.0);
dst_data[0] = static_cast<uint8_t>(b);
dst_data[1] = static_cast<uint8_t>(g);
dst_data[2] = static_cast<uint8_t>(r);
src_data += pixel_bytes_;
dst_data += pixel_bytes_;
}
src_line += line_bytes_;
dst_line += line_bytes_;
}
}
return XOK;
}
瑞利噪声
![](https://filescdn.proginn.com/9c7aee765ccd0220c8aab190d33530cd/4dd21890ae597261e53a407c7a89bb8c.webp)
伽马噪声
![](https://filescdn.proginn.com/77222e108a89313ff31cd1c4db560da4/21cfe5c345b72d1762a30891182af1e2.webp)
指数噪声
![](https://filescdn.proginn.com/c3a0e3aeeb011e0366de29168be698e4/30940163845172cf17b528af31fa7642.webp)
均匀分布噪声
![](https://filescdn.proginn.com/edabd2590640dabb8052821e337a77d5/1862369436751712b661ed779361fc24.webp)
脉冲(椒盐)噪声
![](https://filescdn.proginn.com/b022c988eac63bbced7f40f1b9fff817/6fdccb6f9ab3a627dc1714d0e1d37904.webp)
—版权声明—
仅用于学术分享,版权属于原作者。
若有侵权,请联系微信号:yiyang-sy 删除或修改!
评论