OpenCV | 4.1.0 |
IDE | Visual Studio 2017 Enterprise (15.9.13) |
操作系统 | Windows 10 x64 中文专业版 (1903) |
图像去噪是指减少数字图像中噪声的过程。
现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。
图像去噪声在OCR、机器人视觉与机器视觉领域应用开发中是重要的图像预处理手段之一,对图像二值化与二值分析很有帮助。
OpenCV中常见的图像去噪声的方法有:
1、OpenCV 4.1.0 中提供了以下几种非局部均值去噪调用方式:
fastNlMeansDenoising() :用于 1 通道、2 通道或 3 通道 8 位图像。(单个灰度图像)
fastNlMeansDenoisingColored() :用于 1 通道、2 通道、3 通道或 4 通道的 8 位或 16 位图像(16位下仅NORM_L1)。(彩色图像)
fastNlMeansDenoisingMulti() :用于 8 位 3 通道图像。(灰度图像序列)
fastNlMeansDenoisingColoredMulti():用于 8 位 3 通道图像序列。(彩色图像序列)
2、函数声明:
void fastNlMeansDenoising( InputArray src,
OutputArray dst,
float h = 3,
int templateWindowSize = 7,
int searchWindowSize = 21
);
void fastNlMeansDenoising( InputArray src,
OutputArray dst,
const std::vector& h,
int templateWindowSize = 7,
int searchWindowSize = 21,
int normType = NORM_L2
);
void fastNlMeansDenoisingColored( InputArray src,
OutputArray dst,
float h = 3,
float hColor = 3,
int templateWindowSize = 7,
int searchWindowSize = 21
);
void fastNlMeansDenoisingMulti( InputArrayOfArrays srcImgs,
OutputArray dst,
int imgToDenoiseIndex,
int temporalWindowSize,
float h = 3,
int templateWindowSize = 7,
int searchWindowSize = 21
);
void fastNlMeansDenoisingMulti( InputArrayOfArrays srcImgs,
OutputArray dst,
int imgToDenoiseIndex,
int temporalWindowSize,
const std::vector& h,
int templateWindowSize = 7,
int searchWindowSize = 21,
int normType = NORM_L2
);
void fastNlMeansDenoisingColoredMulti( InputArrayOfArrays srcImgs,
OutputArray dst,
int imgToDenoiseIndex,
int temporalWindowSize,
float h = 3,
float hColor = 3,
int templateWindowSize = 7,
int searchWindowSize = 21
);
#include
#include
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat src = imread("../images/test.jpg");
if (src.empty()) {
printf("不能打开图像!\n");
return -1;
}
namedWindow("1--原图", WINDOW_AUTOSIZE);
imshow("1--原图", src);
Mat result1;
// 图像去噪
fastNlMeansDenoisingColored(src, result1, 5, 5, 7, 21);
imshow("2--fastNlMeansDenoisingColored", result1);
waitKey(0);
return 0;
}
fastNlMeansDenoisingColored()这个函数运行耗时有点长,即使我们用到的这张图像文件并不大。
经过去噪后的图像更加细腻清晰,美颜效果很好。右上方的文字清晰度提升明显。
示例图像文件信息:
程序运行效果图: