2012-11-16 12:44:58 tongfy0000 阅读数 2399
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4442 人正在学习 去看看 贾志刚

图像处理中的滤波器设计

在傅里叶变换中,低频决定图像再平滑区域中总体灰度级的显示,而高频决定图像细节部分。是低频通过而使高频衰减的滤波器称为“低通滤波器”;具有相反特性的滤波器称为“高通滤波器”。被低通滤波器的处理的图像比原始图像少一些尖锐的细节,因为高频部分已经衰减。同样,被高通滤波的图像在平滑区域中将减少一些灰度级的变化并突出过渡(如边缘)灰度级的细节部分。

 

低通滤波器

         在灰度连续变化的图象中,如果出现了与相邻象素的灰度相差很大的点,比如说一片暗区中突然出现了一个亮点,人眼能很容易觉察到。就象看老电影时,由于胶片太旧,屏幕上经常会出现一些亮斑。这种情况被认为是一种噪声。灰度突变在频域中代表了一种高频分量,低通滤波器的作用就是滤掉高频分量,从而达到减少图象噪声的目的。

什么是平滑(smoothing)?如下面两幅图所示:可以看到,左图比右图柔和一些(也模糊一些)。将原图中的每一点的灰度和它周围八个点的灰度相加,然后除以9,作为新图中对应点的灰度,就能实现下面的效果。就像和面一样,先在中间加点水,然后不断把周围的面和进来,搅拌几次,面就均匀了。这就是平滑。

原图

经过平滑处理后的图

 

滤波器(模板、核、掩模、窗口)的概念:为了方便地叙述上面所说的“将原图中的每一点的灰度和它周围八个点的灰度相加,然后除以9,作为新图中对应点的灰度”这一操作,我们采用如下的表示方法:

 

1/9 [1 1 1; 1 1 1; 1 1 ]

中间的点表示中心元素,即,用哪个元素做为处理后的元素。

 

中值滤波器

中值滤波也是一种典型的低通滤波器,它的目的是保护图象边缘的同时去除噪声。所谓中值滤波,是指把以某点(x,y)为中心的小窗口内的所有象素的灰度按从大到小的顺序排列,将中间值作为(x,y)处的灰度值(若窗口中有偶数个象素,则取两个中间值的平均)。中值滤波是如何去除噪声的呢?举个例子就很容易明白了。

原图

处理后的图

0  0  0  0  0  0  0

0         0  0  0  0  0  0

0  0  1  1  1  0  0

0  0  1  6  1  0  0

0  0  1  1  1  0  0

0  0  0  0  0  0  0

0  0  0  0  0  0  0

1         0  0  0  0  0  0

0  0  1  1  1  0  0

0  0  1  1  1  0  0

0  0  1  1  1  0  0

0  0  0  0  0  0  0

图中数字代表该处的灰度。可以看出原图中间的6和周围的灰度相差很大,是一个噪声点。经过3×1窗口(即水平3个象素取中间值)的中值滤波,得到右边那幅图,可以看出,噪声点被去除了。

 

均值滤波器

         又称Box滤波器。

高斯滤波

         所谓径向基函数 (Radial Basis Function 简称 RBF), 就是某种沿径向对称的标量函数。通常定义为空间中任一点x到某一中心xc之间欧氏距离的单调函数 , 可记作 k(||x-xc||), 其作用往往是局部的 , 即当x远离xc时函数取值很小。最常用的径向基函数是高斯核函数 ,形式为 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ)^2) } 其中xc为核函数中心,σ为函数的宽度参数 , 控制了函数的径向作用范围。

高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是:

1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向

2)高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真.

3)高斯函数的付立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数付立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号.

4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷.

5)由于高斯函数的可分离性,大高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长.

 

滤波器比较

下面将中值滤波和上面介绍的两种平滑模板作个比较,看看中值滤波有什么特点。我们以一维模板为例,只考虑水平方向,大小为3×1(宽×高)。Box模板为1/3 [1 1 1],高斯模板为1/4 [1 2 1]。

先考察第一幅图:

原图

Box模板处理后

Gauss模板处理后

经中值滤波处理后

0  0  0   1   1  1

0  0  1/3 2/3  1  1

0  0  1/4 3/4  1  1

0  0  0   1   1  1

 0   1/3 2/3  1

 1/9 1/3 2/3  8/9

 1/12 1/3 2/3 11/12

 0 1/3 2/3   1

0   1/4 3/4   1

1/12 1/3 2/3 11/12

1/16 5/16 11/16 15/16

0   1/4 3/4   1

0         0  1   1

0          1/3 2/3 1

0         1/4 3/4 1

0  0   1  1

从原图中不难看出左边区域灰度值低,右边区域灰度值高,中间有一条明显的边界,这一类图象称之为“step”(就象灰度上了个台阶)。应用平滑模板后,图象平滑了,但是也使边界模糊了。应用中值滤波,就能很好地保持原来的边界。所以说,中值滤波的特点是保护图象边缘的同时去除噪声。

 

再看第二幅图:

原图

Box模板处理后

Gauss模板处理后

经中值滤波处理后

不难看出,原图中有很多噪声点(灰度为正代表灰度值高的点,灰度为负代表灰度值低的点),而且是杂乱无章,随机分布的。这也是一类很典型的图,称之为高斯噪声。经过Box平滑,噪声的程度有所下降。Gauss模板对付高斯噪声非常有效。而中值滤波对于高斯噪声则无能为力。

 

最后看第三幅图:

原图

Box模板处理后

Gauss模板处理后

经中值滤波处理后

1 2 10 2 1

1 3 11 3 1

1 2 10 2 1

13/3 14/3 13/3

5   17/3  5

13/3 14/3  13/3

15/4  6  15/4

9/2   7  9/2

15/4  6  15/4

2   2   2

3   3   3

2   2   2

从原图中不难看出,中间的灰度要比两边高许多。这也是一类很典型的图,称之为脉冲 (impulse)。可见,中值滤波对脉冲噪声非常有效

综合以上三类图,不难得出下面的结论:中值滤波容易去除孤立点/线的噪声,同时保持图象的边缘;它能很好的去除二值噪声,但对高斯噪声无能为力。要注意的是,当窗口内噪声点的个数大于窗口宽度的一半时,中值滤波的效果不好。这是很显然的。

 

 

 

 

 

0 0 0  0  0
0 0 1  0 0
0 1 1  1 0
0 0 1  0 0
0 0 0  0  0  你说这个点是不是边缘  如果不是边缘  他有什么作用  

 

所以说梯度算子在理论上是可以检测所有的边缘  但是:

并不是所有的边缘都有意义

所以会有其他算法或算子

每个算子或算法侧重点不同 意义也不同  

这主要看你的图像和你要达到的结果了

这个点明显的是个孤立点  一般我们处理图像时都会把它去掉  

所以这个时候八邻域 16邻域 效果就很好

2015-06-09 20:29:55 lvlitc 阅读数 6431
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4442 人正在学习 去看看 贾志刚

         图像滤波大多数用于图像的模糊处理和减小噪声(个人理解)。常见的滤波有:均值滤波,中值滤波,高斯滤波等。在这我主要介绍一下中值滤波,它对于处理椒盐噪声十分有效。下面我简单介绍下它的原理,以及我自己写的中值滤波函数。

          均值滤波:    

           对一副图像上的某个点进行中值滤波处理,先将掩模内欲求的像素及其邻域的像素值排序,确定出中值,然后将这个中值赋值给该像素。如图所示一个5 x 5邻域中,用中值124代替中心的像素值。

 

                                  

          

Mat MedianFilter(Mat img) //中值滤波器
{
	int count = 0;   //领域中像素个数
	int index=0;
	int pixel1[9];     //数组存放像素值
	int pixel2[9];
	int pixel3[9];
	for (int x = 1; x < img.rows-1; x++)   //遍历像素,并用邻域像素的中值代替该像素
	{
		for (int y = 1; y < img.cols-1; y++)
		{
			count = 0;
			for (int row = -kernel_size / 2; row <= kernel_size / 2; row++)  //计算邻域像素
			{		
				int row2 = x + row;		
				for (int col = -kernel_size / 2; col <= kernel_size / 2; col++)
				{
					int col2 = y + col;		
					pixel1[count] = *(img.data + img.step[0] * row2 + img.step[1] * col2);  //将邻域像素放入数组
					pixel2[count] = *(img.data + img.step[0] * row2 + img.step[1] * col2 + img.elemSize1());
					pixel3[count] = *(img.data + img.step[0] * row2 + img.step[1] * col2 + img.elemSize1()*2);
					count++;
				}
			}
			bubblingsort(pixel1,count);  //排序
			bubblingsort(pixel2, count);
			bubblingsort(pixel3, count);
			*(img.data + img.step[0] * x + img.step[1] * y) = pixel1[count/2];  //用邻域像素的中值代替该像素
			*(img.data + img.step[0] * x + img.step[1] * y + img.elemSize1()) = pixel2[count/2];
			*(img.data + img.step[0] * x + img.step[1] * y + img.elemSize1()*2) = pixel3[count / 2];
		}

	}
	return img;
}

           

 注:我的代码中没有对图像的边缘像素进行处理,由于输入输出是同一张图,所以边缘像素依旧为原来的像素。
             运行结果:
           原图(带椒盐噪声):                                                                                                     处理后(中值滤波):

     

                   

        显然中值滤波对去除椒盐噪声有着明显的作用,但由于能力有限,并没有完全达到去除的效果,而且感觉有部分细节丢失,欢迎大神随时指点补充交流! 

      转载请说明出处!谢谢


2019-08-03 17:16:41 woshiyigehaowawa 阅读数 768
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4442 人正在学习 去看看 贾志刚

图像的滤波概念

图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。
滤波图解
滤波后图片像素会相较于原图降低,至于降低多少由B决定
常见的去燥方式有平滑滤波,高斯滤波和中值滤波。

平滑滤波

叠加在有用数据上的随机噪声在很多情况下可以近似地认为是白噪声。白噪声具有一个很重要的统计特性,即它的统计平均值为零。因此可以求平均值的办法来消除随机误差,这就是所谓平滑滤波。

  1. 算术平均滤波法
    算术平均滤波法适用于对一般的具有随机干扰的信号进行滤波。这种信号的特点是信号本身在某一数值范围附近上下波动,如测量流量、液位时经常遇到这种情况。
  2. 递推平均滤波法
    算术平均滤波方法每计算一次数据,需测量N次,对于测量速度较慢或要求数据计算速率较高的实时系统,则无法使用。
    递推平均滤波法:在存储器中,开辟一个区域作为暂存队列使用,队列的长度固定为N,每进行一次新的测量,把测量结果放入队尾,而扔掉原来队首的那个数据,这样在队列中始终有个“最新”的数据。
    在这里插入图片描述
    图中五分之一

高斯滤波

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。 通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。是一种有效的去燥方式
在这里插入图片描述

中值滤波

由有N个奇数个的像素值组成的数据集,通过对像素值进行从小到大的顺利来排序得到中间值,然后替换原数据中的中间位置的值,可以如此重复的进行多次得到最后滤波后的数据
对椒盐噪声由很好的效果
在这里插入图片描述

参考:https://blog.csdn.net/c11556913/article/details/80152278
参考:屈老师课程

2015-01-20 09:54:25 scottly1 阅读数 21129
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4442 人正在学习 去看看 贾志刚

同态滤波:
利用广义叠加原理对同态系统进行滤波。
同态滤波是把频率过滤和灰度变换结合起来的一种图像处理方法,它依靠图像的照度/ 反射率模型作为频域处理的基础,利用压缩亮度范围和增强对比度来改善图像的质量。使用这种方法可以使图像处理符合人眼对于亮度响应的非线性特性,避免了直接对图像进行傅立叶变换处理的失真
同态滤波的基本原理是:将像元灰度值看作是照度和反射率两个组份的产物。由于照度相对变化很小,可以看作是图像的低频成份,而反射率则是高频成份。通过分别处理照度和反射率对像元灰度值的影响,达到揭示阴影区细节特征的目的。

同态滤波处理的基本流程如下:
S(x,y)---->Log---->DFT---->频域滤波---->IDFT---->Exp---->T(x,y)
其中S(x,y)表示原始图像;T(x,y)表示处理后的图像;Log 代表对数运算;DFT 代表傅立叶变换(实际操作中运用快速傅立叶变换FFT);IDFT 代表傅立叶逆变换(实际操作中运用快速傅立叶逆变换IFFT);Exp 代表指数运算。

下面是一张典型的同态滤波与其他图像处理方式的异同:


实现代码:

function I3 = test_tontai(I)

I=double(rgb2gray(I));
[M,N]=size(I);
rL=0.5;
rH=4.7;%可根据需要效果调整参数
c=2;
d0=10;
I1=log(I+1);%取对数
FI=fft2(I1);%傅里叶变换
n1=floor(M/2);
n2=floor(N/2);
for i=1:M
    for j=1:N
        D(i,j)=((i-n1).^2+(j-n2).^2);
        H(i,j)=(rH-rL).*(exp(c*(-D(i,j)./(d0^2))))+rL;%高斯同态滤波
    end
end
I2=ifft2(H.*FI);%傅里叶逆变换
I3=real(exp(I2));
subplot(122),imshow(I3,[]);title('同态滤波增强后');


实验发现,同态滤波有类似于高动态范围压缩的效果,比如可以把图像暗的部分提亮。


下图为原始图像,属于低曝光的一幅图像:



同态滤波后:



注:原创文章,转载请注明出处: http://blog.csdn.net/scottly1/article/details/42705271


图像处理 中值滤波

阅读数 7571

没有更多推荐了,返回首页