数字图像处理合集——图像增强

实现:
1.掌握线性/非线性灰度变换,理解不同的灰度变换所应用的场景及不同的处理效果,掌握线性/非线性灰度变换的数学原理。
2. 掌握直方图均衡化算法,理解直方图均衡化算法是一种增加图像灰度动态范围,掌握算法的数学原理。
3. 掌握邻域/中值平滑算法,理解模板卷积概念,理解邻域/中值平滑图像处理的效果及其对于椒盐噪声和高斯噪声不同的处理结果。

1、线性变换压缩图像,拉伸图像低灰度区,压缩图像高亮度区的代码。
线性变换主要使用f(x)=a*x+b来实现,不同的a和b有不同的处理效果。其中参数a为线性函数的斜率,b为线性函数的在y轴的截距,x表示输入图像的灰度,f(x)表示输出图像的灰度。
实现代码如下所示:

double fa = 1.0, fb = 0.0;
	while(fa>=-1)
	{
		for (int i = 0; i < src->height; i++)
		{
			for (int j = 0; j < src->width; j++)
			{
				//cvGet2D获取图像的颜色值若是灰度图,就是单通道图像,获取的就是每一个像素点的灰度值。
				CvScalar s = cvGet2D(src, i, j);
				s.val[0] = fa * s.val[0] + fb;
				//cvSet2D此函数用户设置指定图像位置坐标的像素值
				cvSet2D(dst, i, j, s);
			}
		}
		cvNamedWindow("Image", 1);//创建窗口
		cvShowImage("Image", dst);//显示图像
		cvWaitKey(0); //等待按键
		cvDestroyWindow("Image");//销毁窗口
		cout << "请输入灰度线性变换fa值(fa>=-1)" << endl;
		cin >> fa;
		cout << "请输入灰度线性变换fb值" << endl;
		cin >> fb;
	}

实现效果:
1.线性变换压缩图像,拉伸图像低灰度区,压缩图像高亮度区
无变换实现结果如图1所示。线性变换实现结果如图2所示。
无变换结果:
数字图像处理合集——图像增强_第1张图片
进行线性变换:
数字图像处理合集——图像增强_第2张图片
2、OpenCV直方图均衡化相关函数原型、参数定义、关键代码。
灰度直方图是灰度值的函数,描述的是图像中具有该灰度值的像素的个数,其横坐标表示像素的灰度级别,纵坐标表示该灰度出现的频率(象素的个数)。直方图均衡化是把原始图像的直方图变换为均匀分布的形式,从而增加图像灰度的动态范围,以达到增强图像对比度的效果。
实现代码如下所示:

int new_table[256] = { 0 };
	float s_table[2] = { (float)table[0] / sum };
	//计算累计直方图并取整确定映射关系
	for (int i = 1; i < 256; i++)
	{
		s_table[i % 2] = s_table[(i - 1) % 2] + (float)table[i] / sum;
		new_table[i] = (int)(s_table[i % 2] * 255 + 0.5);
	}
	for (int i = 0; i < src->height; i++)
	{
		for (int j = 0; j < src->width; j++)
		{
			CvScalar s = cvGet2D(src, i, j);
			s.val[0] = new_table[(int)s.val[0]];
			cvSet2D(dst, i, j, s);
		}
	}
	cvNamedWindow("Image", 1);//创建窗口
	cvShowImage("Image", dst);//显示图像
	cvNamedWindow("Image", 1);//创建窗口
	cvWaitKey(0); //等待按键
	cvDestroyWindow("Image");//销毁窗口
	cvReleaseImage(&dst); //释放图像

实现效果:
显示原图像直方图并进行均衡化处理实验结果如图3所示。
数字图像处理合集——图像增强_第3张图片

3、OpenCV去噪函数原型、参数定义、关键代码。
使用均值滤波函数进行滤波,去除原图像上的椒盐噪声。实现代码如下所示:

g_nKernelValue = g_nTrackbarValue * 2 + 1;
	//均值滤波函数
	blur(g_srcImage, g_dstImage, Size(g_nKernelValue, g_nKernelValue));
	imshow("均值滤波", g_dstImage);

实现效果:
使用均值滤波函数进行去噪,没进行去噪操作的实验图如图4所示,去噪kernel尺寸为3的实验结果如图5所示,去噪kernel尺寸为9的实验结果如图6所示。
没进行去噪:
图4
去噪kernel尺寸为3:
数字图像处理合集——图像增强_第4张图片
去噪kernel尺寸为9:
图6
合集入口

测试资源下载入口

你可能感兴趣的:(初学者C++,数字图像处理,opencv,c++,图像处理)