【数字图像处理(第三版)】 第三章 灰度变换与空间滤波

1. 基本灰度变换函数

图像反转

对数变换

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第1张图片

伽马变换

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第2张图片

 

2. 分段线性变换函数

对比度拉伸

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第3张图片

灰度级分层

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第4张图片

比特平面分层

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第5张图片【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第6张图片【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第7张图片

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第8张图片【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第9张图片【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第10张图片

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第11张图片 【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第12张图片【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第13张图片

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第14张图片

原图地址:https://images0.cnblogs.com/blog2015/442754/201507/041739471417260.jpg

代码:

void generateBitImg(cv::Mat srcImg, int iMaxVal, int iMinVal)
{
	cv::Mat dstImg;
	srcImg.copyTo(dstImg);

	int rows = dstImg.rows;
	int cols = dstImg.cols * dstImg.channels();
	for (int i = 0; i < rows; i++)
	{
		uchar * data = dstImg.ptr(i);
		for (int j = 0; j < cols; j++)
		{
			if (data[j] <= iMaxVal && data[j] >= iMinVal)
			{
				data[j] = 1;
			}
			else
			{
				data[j] = 0;
			}
		}
	}
	char strTemp[256] = "";
	sprintf_s(strTemp, "%d_%d_bit.jpg", iMinVal, iMaxVal);
	cv::imwrite(strTemp, dstImg);
}

3. 直方图处理

直方图均衡/直方图规定化

局部直方图均衡:定义一个邻域,并把该区域的中心从一个像素移至另一个像素。在每个位置,计算邻域中的点的直方图,并且得到的不是直方图均衡化,就是规定化变换函数。这个函数最终用于映射邻域中心像素的灰度。然后,邻域的中心北移至一个相邻像素位置,并重复该过程。当邻域进行像素平移时,由于只有邻域中的一行或一列改变,所以可在每一步移动中,以新数据更新前一个位置得到的直方图。这种方法与区域每移动一个像素位置就计算邻域中所有像素的直方图相比有明显的优点。有时用于减少计算量的另一种方法是使用非重叠区域,但这种方法通常会产生我们不希望的“棋盘”效应。

相关论文:https://wenku.baidu.com/view/2857fe0c0740be1e650e9a60.html

4. 空间滤波基础

空间滤波机理

空间滤波器是由一个邻域对该邻域包围的图像像素执行的预定义操作组成。滤波产生一个新像素,新像素的坐标等于邻域中心的坐标,像素的值是滤波操作的结果。

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第15张图片

空间相关与卷积

相关是滤波器模板移过图像并计算每个位置乘积之和的处理。

卷积的机理与相关相似,但滤波器首先要旋转180°。

5. 平滑空间滤波器

平滑线性滤波器(均值滤波器)

均值滤波器可以降低图像灰度的“尖锐”变化,但也存在不希望有的边缘模糊效应。均值滤波器的主要应用是去除图像中的不相关细节,其中“不相关”是指与滤波器模板尺寸相比较小的像素区域

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第16张图片

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第17张图片

统计排序(非线性)滤波器(中值滤波器)

中值滤波器具有优秀的去噪能力(特别针对椒盐噪声),而且比相同尺寸的新型平滑滤波器的模糊程序明显要低。

6. 锐化空间滤波器

二阶微分图像锐化--拉普拉斯算子

/** @example samples/cpp/laplace.cpp
An example using Laplace transformations for edge detection
*/

/** @brief Calculates the Laplacian of an image.

The function calculates the Laplacian of the source image by adding up the second x and y
derivatives calculated using the Sobel operator:

\f[\texttt{dst} =  \Delta \texttt{src} =  \frac{\partial^2 \texttt{src}}{\partial x^2} +  \frac{\partial^2 \texttt{src}}{\partial y^2}\f]

This is done when `ksize > 1`. When `ksize == 1`, the Laplacian is computed by filtering the image
with the following \f$3 \times 3\f$ aperture:

\f[\vecthreethree {0}{1}{0}{1}{-4}{1}{0}{1}{0}\f]

@param src Source image.
@param dst Destination image of the same size and the same number of channels as src .
@param ddepth Desired depth of the destination image.
@param ksize Aperture size used to compute the second-derivative filters. See #getDerivKernels for
details. The size must be positive and odd.
@param scale Optional scale factor for the computed Laplacian values. By default, no scaling is
applied. See #getDerivKernels for details.
@param delta Optional delta value that is added to the results prior to storing them in dst .
@param borderType Pixel extrapolation method, see #BorderTypes
@sa  Sobel, Scharr
 */
CV_EXPORTS_W void Laplacian( InputArray src, OutputArray dst, int ddepth,
                             int ksize = 1, double scale = 1, double delta = 0,
                             int borderType = BORDER_DEFAULT );

拉普拉斯算子源码位置:...\sources\modules\imgproc\src\deriv.cpp

示例

Mat src = imread("1.jpg");  //工程目录下应该有一张名为1.jpg的素材图

	GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT);

	Mat src_gray;
	cvtColor(src, src_gray, COLOR_RGB2GRAY);

	int ksize = 1;
	float K[3][9] =
	{
		{ 0, 1, 0, 1, -4, 1, 0, 1, 0 },
		{ 2, 0, 2, 0, -8, 0, 2, 0, 2 },
		{ 1, 1, 1, 1, -8, 1, 1, 1, 1 }
	};
	Mat kernel(3, 3, CV_32F, K[0]);

	Mat _dst;
	filter2D(src_gray, _dst, src_gray.type(), kernel, Point(-1, -1), 0, BORDER_DEFAULT);

	Mat _dst_2;
	Mat kernel_2(3, 3, CV_32F, K[2]);
	filter2D(src_gray, _dst_2, src_gray.type(), kernel_2, Point(-1, -1), 0, BORDER_DEFAULT);

该示例对比了两个滤波器模板

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第18张图片【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第19张图片

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第20张图片【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第21张图片

非锐化遮蔽和高提升滤波

具体步骤如下:a.模糊原图像。b.从原图像中减去模糊图像(产生的差值图像称为模板)。c.将模板加到原图像上。

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第22张图片【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第23张图片

 【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第24张图片

【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第25张图片【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第26张图片【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第27张图片【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第28张图片【数字图像处理(第三版)】 第三章 灰度变换与空间滤波_第29张图片

使用一阶微分对(非线性)图像锐化——梯度(sobel算子)

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(OpenCV)