开始之前
再说上一篇文章中, 我们想按照噪声产生, 然后将降噪的, 但是限于篇幅, 我就放在这一篇里面了,
说起图像的噪声问题就又回到了我们上一章的内容, 把噪声当作信号处理, 实际上数字图像处理实际上也是在进行数字信号的处理过程, 我们这一章就是将滤除信号的过程,
根据上一章的方式, 我们对图像添加噪声, 然后计算 PSNR 与 SSIM 参数, 然后通过降噪, 再从新计算参数值, 比较我们算法的效果 对比我们的算法效果, 看正文吧
目录
文章目录
正文
我们在上一章给出了两种噪声的添加方式, 可以根据我们的需求添加椒盐噪声和高斯噪声, 但是由于我们的噪声添加使用了随机数 , 导致我们在每次进行的结果可能不一致, 所以我们提前设计好噪声情况, 将图片存储起来, 后面我们进行滤波的时候, 都使用一样的照片, 这样我们能够保证每次的结果是一致的, 这样就能进行算法的对比了,
生成噪声图像
我们在上一章给出了不同噪声情况下图像结果, 也给出了一个链接, 对比了更多情况下的图像噪声情况, 可以参考, 所以我们考虑五种情况吧 分别是低椒盐噪声, 高椒盐噪声,低高斯噪声, 高高斯噪声,低椒盐混合低高斯噪声, 高椒盐混合高高斯噪声. 我们分别将图片进行存储便能够得到结果
说明一下: 之前的算法使用的 lena 图像 忘记从那搞来的了, 今天对比了一下, 发现图像不太对, 我现在找到opencv的一个标准图像Lena.jpg, 我下载下来了, 转换成了 lena.png 的图像, 可以见lena.png 这幅图, 可以直接访问链接 https://gitee.com/schen00/BlogImage/raw/master/小书匠/1588298950276.png 直接下载即可…
这里的处理算法比较简单, 我们来看代码
void MainWindow::testFunc1(void)
{
// 用于生成 测试图像 一共6幅图像
std::vector<cv::Mat> noise_img(6);
// 初始化为原始图像
for(auto &m: noise_img)
m = gSrcImg.clone();
// 分别添加 低, 高, 低混合, 高混合 共6幅图像
addSaltNoise(noise_img[0],1000);
addSaltNoise(noise_img[1],10000);
addGaussianNoise(noise_img[2],0,1);
addGaussianNoise(noise_img[3],100,10);
addSaltNoise(noise_img[4],1000);
addGaussianNoise(noise_img[4],0,1);
addSaltNoise(noise_img[5],10000);
addGaussianNoise(noise_img[5],100,10);
// 计算 6幅图像的 psnr 和 ssim 然后存储结果值
std::vector<double> psnr(6);
std::vector<cv::Scalar> mssim(6);
QString res_temp = "image-%1: psnr:%2, mssim: B:%3 G:%4 R:%5 ";
QString res_str;
// 计算每个图像的 参数值, 然后存储起来
for(int i=0;i<6;i++)
{
psnr[i] = getPSNR(gSrcImg, noise_img[i]);
mssim[i] = getMSSIM(gSrcImg, noise_img[i]);
res_str = res_temp.arg(i+1)
.arg(psnr[i])
.arg(mssim[i].val[0])
.arg(mssim[i].val[1])
.arg(mssim[i].val[2]);
ui->pt_log->appendPlainText(res_str);
cv::imwrite("../testimages/noise/lena-" + std::to_string(i+1) + ".png", noise_img[i]);
}
}
我们将图片输出, 然后输出了每幅图的参数, 同时将结果图存储下来, 由于我们在实际进行图像处理的时候会有很多
image-1: psnr:29.4922, mssim: B:0.880587 G:0.888243 R:0.944992
image-2: psnr:19.4727, mssim: B:0.353134 G:0.383638 R:0.629353
image-3: psnr:46.8705, mssim: B:0.991138 G:0.991732 R:0.991185
image-4: psnr:9.15966, mssim: B:0.492354 G:0.482311 R:0.680167
image-5: psnr:29.2807, mssim: B:0.874794 G:0.881488 R:0.935624
image-6: psnr:8.92587, mssim: B:0.392531 G:0.393254 R:0.655795
我这里使用之前提到的 图像"拼接" 的方式将图像拼接起来, 这样我们可以更为直观的比较, 图像尺寸都是 512 ∗ 512 512*512 512∗512, 如果需要可以裁剪出来,
优快云 上传会自己转存图片, 上传资源比较麻烦, 懒得搞, 我这边的图片都存在了 gitee 的图床上, 原图存储的 , 有需要的可以自己取用

传统图像降噪算法及其对比
之前提到过

本文介绍了如何在opencv中实现图像噪声添加与均值滤波。通过添加椒盐噪声和高斯噪声,然后使用算术均值滤波和加权均值滤波进行降噪,并提供C++代码实现。文章探讨了传统降噪方法,强调了空域滤波的重要性,并对比了不同滤波器的效果。
最低0.47元/天 解锁文章
8826

被折叠的 条评论
为什么被折叠?



