2019-12-12 22:28:47 weixin_44225182 阅读数 191
  • 数据分析快速实践:企业真实案例精讲

    本课目的是培养数据分析师和人工智能人才,紧跟Python及大数据技术,课程取材于企业一线真实需求,符合企业对热门技术的需求。 课程内容包括:NumPy 的用途与开发环境、数组对象、多维数组、索引与切片、数据类型、组合数组、分割数组、读取CSV 文件、算数平均值、加权平均值、统计学概念、针对时间的数据分析、数组的卷积运算、线性模型、ndarray 对象的方法、NumPy的便捷函数、多项式拟合、符号数组、矢量化、数据平滑等。并基于 matplotlib 的数据可视化内容,包括:简单绘图 、定制绘图、子坐标图、刻度定位、颜色填充、散点图、条形图、饼图、三维绘图、对数坐标图、图例和注释等。

    41 人正在学习 去看看 杨威

一、实验名称

图像的噪声与滤波处理

二、实验目的

1.熟悉MATLAB软件的使用。
2.掌握图像的噪声与滤波处理。

三、实验内容

1.对一张图片添加不同强度的高斯噪声、椒盐噪声
2.对图像进行不同模板的均值滤波、高斯加权滤波、中值滤波,对比结果并分析不同滤波方式的优劣

四、实验仪器与设备

Win10 64位电脑
MATLAB2017a

五、实验原理

高斯噪声
    所谓高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。高斯白噪声包括热噪声和散粒噪声。在通信信道测试和建模中,高斯噪声被用作加性白噪声以产生加性白高斯噪声。
椒盐噪声
    椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。盐和胡椒噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。
均值滤波
    均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=∑f(x,y)/m m为该模板中包含当前像素在内的像素总个数。
高斯加权滤波
    高斯滤波实质上是一种信号的滤波器,其用途是信号的平滑处理,人们知道数字图像用于后期应用,其噪声是最大的问题,由于误差会累计传递等原因,很多图像处理教材会在很早的时候介绍Gauss滤波器,用于得到信噪比SNR较高的图像(反应真实信号)。与此相关的有Gauss-Laplace变换,其实就是为了得到较好的图像边缘,先对图像做Gauss平滑滤波,剔除噪声,然后求二阶导矢,用二阶导的过零点确定边缘,在计算时也是频域乘积至空域卷积。
中值滤波
    中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为33,55区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。

六、实验过程及代码

添加高斯噪声

方案一:利用imnoise()函数

t=imread('a1.jpg');
imshow(t),title('原图');
t1=imnoise(t,'gaussian',0,0.01);
figure,imshow(t1),title('添加均值为0,方差为0.01的高斯噪声');
t2=imnoise(t,'gaussian',0,0.02);
figure,imshow(t2),title('添加均值为0,方差为0.02的高斯噪声');
t3=imnoise(t,'gaussian',0,0.03);
figure,imshow(t3),title('添加均值为0,方差为0.03的高斯噪声');
t4=imnoise(t,'gaussian',0.2,0.01);
figure,imshow(t4),title('添加均值为0.2,方差为0.01的高斯噪声');
t5=imnoise(t,'gaussian',0.4,0.01);
figure,imshow(t5),title('添加均值为0.4,方差为0.01的高斯噪声');

方案二:利用randn()函数

t=imread('a1.jpg');
[m,n,z]=size(t);
y=0+0.1*randn(m,n);
t1=double(t)/255;
t1=t1+y;
t1=t1*255;
t1=uint8(t1);
subplot(1,2,1),imshow(t),title('原图');
subplot(1,2,2),imshow(t1),title('加入均值为0,标准差为0.1的高斯噪声后');

方案三:自主随机生成二维高斯分布矩阵

 image=imread('a1.jpg');
[width,height,z]=size(image);
subplot(1,2,1);
imshow(image);
title('原图');
av=0;
std=0.1;
u1=rand(width,height);
u2=rand(width,height);
x=std*sqrt(-2*log(u1)).*cos(2*pi*u2)+av;
result1=double(image)/255+x;
result1=uint8(255*result1);
subplot(1,2,2);
imshow(result1);
title('加入均值为0,标准差为0.1的高斯噪声后');

加入椒盐噪声

方案一:利用imnoise()函数

 t=imread('a1.jpg');
subplot(1,2,1),imshow(t),title('原图');
t1=imnoise(t,'salt & pepper',0.1);
subplot(1,2,2),imshow(t1),title('加入噪声密度:0.1的椒盐噪声');
t2=imnoise(t,'salt & pepper',0.2);
figure,subplot(1,2,1),imshow(t2),title('加入噪声密度:0.2的椒盐噪声');
t3=imnoise(t,'salt & pepper',0.3);
subplot(1,2,2),imshow(t3),title('加入噪声密度:0.3的椒盐噪声');

方案二:产生随机数

image=imread('a1.jpg');
[width,height,z]=size(image);

result2=image;
subplot(1,2,1)
imshow(image);
title('原图');
k1=0.2;
k2=0.2;
a1=rand(width,height)<k1;
a2=rand(width,height)<k2;
t1=result2(:,:,1);
t2=result2(:,:,2);
t3=result2(:,:,3);
t1(a1&a2)=0;
t2(a1&a2)=0;
t3(a1&a2)=0;
t1(a1& ~a2)=255;
t2(a1& ~a2)=255;
t3(a1& ~a2)=255;
result2(:,:,1)=t1;
result2(:,:,2)=t2;
result2(:,:,3)=t3;
subplot(1,2,2)
imshow(result2);
title('加高斯噪声后');

均值滤波(对高斯噪声和椒盐噪声)

 t=imread('a1.jpg');
[m,n,z]=size(t);
t1=imnoise(t,'gaussian',0,0.02);
imshow(t1),title('加入高斯噪声后')
t2=t;
for i=1:m-2
for j=1:n-2
t2(i+1,j+1,:)=round(t2(i,j,:)/9+t2(i,j+1,:)/9+t2(i,j+2,:)/9+t2(i+1,j,:)/9+t2(i+1,j+1,:)/9+t2(i+1,j+2,:)/9+t2(i+2,j,:)/9+t2(i+2,j+1,:)/9+t2(i+2,j+2,:)/9);
end
end
figure,
subplot(1,2,1),imshow(t2),title('3*3均值滤波');
t3=t;
for i=1:m-4
for j=1:n-4
t3(i+2,j+2,:)=round(t3(i,j,:)/25+t3(i,j+1,:)/25+t3(i,j+2,:)/25+t3(i,j+3,:)/25+t3(i,j+4,:)/25+t3(i+1,j,:)/25+t3(i+1,j+1,:)/25+t3(i+1,j+2,:)/25+t3(i+1,j+3,:)/25+t3(i+1,j+4,:)/25+t3(i+2,j,:)/25+t3(i+2,j+1,:)/25+...
t3(i+2,j+2,:)/25+t3(i+2,j+3,:)/25+t3(i+2,j+4,:)/25+t3(i+3,j,:)/25+t3(i+3,j+1,:)/25+t3(i+3,j+2,:)/25+t3(i+3,j+3,:)/25+t3(i+3,j+4,:)/25+...
t3(i+4,j,:)/25+t3(i+4,j+1,:)/25+t3(i+4,j+2,:)/25+t3(i+4,j+3,:)/25+t3(i+4,j+4,:)/25);
end
end
subplot(1,2,2),imshow(t3),title('5*5均值滤波');
t1=imnoise(t,'salt & pepper',0.3);
figure,imshow(t1),title('加入椒盐噪声后')
t2=t;
for i=1:m-2
for j=1:n-2
t2(i+1,j+1,:)=round(t2(i,j,:)/9+t2(i,j+1,:)/9+t2(i,j+2,:)/9+t2(i+1,j,:)/9+t2(i+1,j+1,:)/9+t2(i+1,j+2,:)/9+t2(i+2,j,:)/9+t2(i+2,j+1,:)/9+t2(i+2,j+2,:)/9);
end
end
figure,
subplot(1,2,1),imshow(t2),title('3*3均值滤波');
t3=t;
for i=1:m-4
for j=1:n-4
t3(i+2,j+2,:)=round(t3(i,j,:)/25+t3(i,j+1,:)/25+t3(i,j+2,:)/25+t3(i,j+3,:)/25+t3(i,j+4,:)/25+t3(i+1,j,:)/25+t3(i+1,j+1,:)/25+t3(i+1,j+2,:)/25+t3(i+1,j+3,:)/25+t3(i+1,j+4,:)/25+t3(i+2,j,:)/25+t3(i+2,j+1,:)/25+...
t3(i+2,j+2,:)/25+t3(i+2,j+3,:)/25+t3(i+2,j+4,:)/25+t3(i+3,j,:)/25+t3(i+3,j+1,:)/25+t3(i+3,j+2,:)/25+t3(i+3,j+3,:)/25+t3(i+3,j+4,:)/25+...
t3(i+4,j,:)/25+t3(i+4,j+1,:)/25+t3(i+4,j+2,:)/25+t3(i+4,j+3,:)/25+t3(i+4,j+4,:)/25);
end
end
subplot(1,2,2),imshow(t3),title('5*5均值滤波');

高斯滤波

function h = gaussian( hsize, sigma)
siz = (hsize-1)/2;
[x,y] = meshgrid(-siz(2):siz(2),-siz(1):siz(1));
arg = -(x.*x + y.*y)/(2*sigma*sigma);
h = exp(arg);
h(h<eps*max(h(:))) = 0;
sumh = sum(h(:));
if sumh ~= 0
h = h/sumh;
end
end

t=imread('a1.jpg');
[m,n,z]=size(t);
t1=imnoise(t,'gaussian',0,0.02);
imshow(t1),title('加入高斯噪声后');
martex=gaussian([3 3],1);
t2=t;
for i=m-2
for j=n-2
t2(i+1,j+1,:)=t2(i,j,:)*martex(1,1)+t2(i,j+1,:)*martex(1,2)+t2(i,j+2,:)*martex(1,3)+t2(i+1,j,:)*martex(2,1)+...
t2(i+1,j+1,:)*martex(2,2)+t2(i+1,j+2,:)*martex(2,3)+t2(i+2,j,:)*martex(3,1)+t2(i+2,j+1,:)*martex(3,2)+t2(i+2,j+2,:)*martex(3,3);
end
end
figure,imshow(t2),title('高斯滤波')

中值滤波

function [ img ] = median_filter( image, m )
    n = m;
    [ height, width ] = size(image);
    x1 = double(image);
    x2 = x1;
    for i = 1: height-n+1
        for j = 1:width-n+1
            mb = x1( i:(i+n-1),  j:(j+n-1) );
            mb = mb(:);
            mm = median(mb);
            x2( i+(n-1)/2,  j+(n-1)/2 ) = mm;
 
        end
    end
 
    img = uint8(x2);
end
 
t=imread('a1.jpg');
t1=imnoise(t,'salt & pepper',0.3);
imshow(t1),title('加入椒盐噪声');
t2=median_filter(t,3);
figure,imshow(t),title('中值滤波后')

七、实验结果与分析

添加高斯噪声
方案一:利用imnoise()函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方案二:利用imnoise()函数

在这里插入图片描述

方案三:自主生成高斯噪声
在这里插入图片描述
分析:
对于不同强度的高斯噪声,通过上面三种方案的实验,我们可以得出以下结论:
1.均值决定图像的整体灰度范围,随着均值的增大,那么图像整体的灰度同样也会增长,当然,超过255依然为255,但更多的像素靠近255,从视觉上看起来更加偏白,偏亮。
2.方差决定着图像噪声的密集程度及概率分布程度,方差越大,图像中的噪声对图片的影响也就越大,从视觉上看就是更加密集。

添加椒盐噪声
方案一:
在这里插入图片描述
在这里插入图片描述
方案二:
在这里插入图片描述
分析:
对于imnoise()函数中的d,是指噪声的密度,比如d=0.5,则总数的50%的像素都会随机的变为黑白像素,用来模拟现实情况中图片拍摄过程中遇到的突变脉冲。
均值滤波
对高斯噪声:
在这里插入图片描述
在这里插入图片描述
对椒盐噪声:
在这里插入图片描述
在这里插入图片描述

高斯滤波:
在这里插入图片描述
在这里插入图片描述

中值滤波

在这里插入图片描述
在这里插入图片描述

不同滤波方式总结
高斯滤波:适用于噪声趋于正态分布的图像

均值滤波:把每个像素都用周围的8个像素来做均值操作。可以平滑图像,速度快,算法简单。但是无法去掉噪声。

中值滤波:常用的非线性滤波方法 ,也是图像处理技术中最常用的预处理技术。在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘。适用于椒盐噪声这种类型的噪声。

八、实验总结及心得体会

通过这次实验,学会了两种噪声和几种滤波方法。在此次实验过程中,觉得有点吃力的就是添加高斯噪声和高斯滤波了,那块需要的高数知识有点遗忘,所以在理解上有点问题,后面在csdn上慢慢学习别人写的文章,最后还是学会了。但是自己写的函数与MATLAB中库函数还是有一定的差别,这里应该是自己在一些细节的部分处理的还不行,以后还是应该深入学习。

更多

获取更多资料、代码,微信公众号:海轰Pro
回复 海轰 即可

2019-11-21 20:09:43 qq_41398808 阅读数 152
  • 数据分析快速实践:企业真实案例精讲

    本课目的是培养数据分析师和人工智能人才,紧跟Python及大数据技术,课程取材于企业一线真实需求,符合企业对热门技术的需求。 课程内容包括:NumPy 的用途与开发环境、数组对象、多维数组、索引与切片、数据类型、组合数组、分割数组、读取CSV 文件、算数平均值、加权平均值、统计学概念、针对时间的数据分析、数组的卷积运算、线性模型、ndarray 对象的方法、NumPy的便捷函数、多项式拟合、符号数组、矢量化、数据平滑等。并基于 matplotlib 的数据可视化内容,包括:简单绘图 、定制绘图、子坐标图、刻度定位、颜色填充、散点图、条形图、饼图、三维绘图、对数坐标图、图例和注释等。

    41 人正在学习 去看看 杨威

均值滤波器中,模板内像素的权重都为一,其只是简单的像素加法平均

而,加权均值滤波器,对模板中的像素点赋予不同的权重,求的是像素的加权平均,典型的模板,例如高斯模糊,其模板权重呈现钟型的高斯分布:

                                                                                          \begin{bmatrix} 1 & 2 & 1\\ 2& 4 & 2\\ 1&2 &1 \end{bmatrix}

下面使用上式表示的模板,实现:

图像数据 :

导入,要使用的库:

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

 读取图像数据并可视化:

img = Image.open('Fig0333(a)(test_pattern_blurring_orig).tif')
plt.axis('off')
plt.imshow(img, cmap = 'gray')
plt.show()

滤波过程:

定义滤波模板:

kernel = [[1,2,1], [2,4,2], [1,2,1]]

 滤波函数:

def rejector2(img, m, n, kernel):
    num_sum = [sum(i) for i in kernel]
    num_sum = sum(num_sum)
    img_data = np.array(img)
    img_new = [[] for _ in range(np.shape(img_data)[0])]
    a = m // 2
    b = n // 2
    for i in range(np.shape(img_data)[0]):
        for j in range(np.shape(img_data)[1]):
            num = 0
            x = 0
            for k in range(i-a, i+a+1, 1):
                y = 0
                for l in range(j-b, j+b+1, 1):
                    c = k>=0 and k<np.shape(img_data)[0]
                    d = l>=0 and l<np.shape(img_data)[1]
                    #依然使用0填充
                    if c and d:
                        #计算模板中像素的加权之和
                        num += img_data[k][l] * kernel[x][y]
                    y += 1
                x += 1
            #求平均值
            num = num / num_sum
            img_new[i].append(int(num))
    return img_new

 测试结果,可视化:

img_new = rejector2(img, len(kernel), len(kernel[0]), kernel)

plt.figure(figsize=(25,25))
plt.subplot(131)
plt.axis('off')
plt.imshow(img_new, cmap = 'gray')

plt.subplot(132)
plt.axis('off')
plt.imshow(new_img[0], cmap = 'gray')

plt.subplot(133)
plt.axis('off')
plt.imshow(img, cmap = 'gray')
plt.show()

 左侧为加权均值滤波,中间为平滑线性滤波,右侧为原图像

2013-10-29 16:28:57 zhedahe 阅读数 1621
  • 数据分析快速实践:企业真实案例精讲

    本课目的是培养数据分析师和人工智能人才,紧跟Python及大数据技术,课程取材于企业一线真实需求,符合企业对热门技术的需求。 课程内容包括:NumPy 的用途与开发环境、数组对象、多维数组、索引与切片、数据类型、组合数组、分割数组、读取CSV 文件、算数平均值、加权平均值、统计学概念、针对时间的数据分析、数组的卷积运算、线性模型、ndarray 对象的方法、NumPy的便捷函数、多项式拟合、符号数组、矢量化、数据平滑等。并基于 matplotlib 的数据可视化内容,包括:简单绘图 、定制绘图、子坐标图、刻度定位、颜色填充、散点图、条形图、饼图、三维绘图、对数坐标图、图例和注释等。

    41 人正在学习 去看看 杨威

代码分两部分:

1 与梯度有关的加权滤波器,设计了2个:1)自适应加权滤波器 2)倒数加权滤波器

2 图像的梯度幅值图像,以及x方向的梯度幅值图像和y方向的梯度幅值图像

I=imread('1.png');
I=rgb2gray(I);
[M,N]=size(I);
I=double(I);
J=I;%权重因子处理后的图像
%k=4;%权重因子系数,数学函数表达式:exp( (-x*x)/(2*k) ),k值的选择也很关键
[Gx,Gy]=gradient(I);
W=sqrt(Gx.*Gx+Gy.*Gy); %求梯度幅值图像
%%%%%%%%%%%%%%%延拓图像来求合适的k值
W1=zeros(2*M,2*N);%新的延拓矩阵:(2M*2N)*(2M*2N)
for i=1:M
  for j=1:N
   W1(i,j) = W(i,j);
  end
end
for i=1:M
    for j=N+1:2*N
     W1(i,j) = -W(i,j-N); 
    end
end
%W1分成三部分:W  -W  0矩阵 
Wmean=mean(mean(W(:)));%W矩阵的均值
W2 =Wmean*ones(2*M,2*N);
W3 =W2-W1;
W3=W3.*W3;
%k^2 =e[ [未延拓图像的灰度梯度幅值均值-延拓后图像的灰度梯度幅值]^2 ]
k1 =sum(sum(W3(:)))/(4*M*N); 
k=sqrt(k1);
%%%%%%%%%%使用(功能类似于高通)滤波器,保留边缘与细节
F=zeros(M,N);%权重因子矩阵,存放计算得出的权重因子
for i=1:M
    for j=1:N
      F(i,j) = exp( double(-W(i,j)^2)/(2*k^2) );%自适应滤波器:效果一般
      %F(i,j) =double(1/W(i,j));%梯度倒数加权滤波器: 效果不错
    end
end
%权重因子矩阵F已经求出,联合原先图像,3*3窗口对中心像素进行处理
for i=2:M-1
    for j=2:N-1
      J(i,j)=I(i,j)*F(i,j)+I(i-1,j+1)*F(i-1,j+1)+I(i,j+1)*F(i,j+1)+I(i+1,j+1)*F(i+1,j+1)+I(i-1,j)*F(i-1,j)+I(i+1,j)*F(i+1,j)+I(i-1,j-1)*F(i-1,j-1)+I(i,j-1)*F(i,j-1)+I(i+1,j-1)*F(i+1,j-1); 
    end
end
%由滤波器的特性,我们发现:
%边缘处梯度值往往较大,F(i,j)=0,J(i,j)也基本等于0,所以处理后的图像边缘为黑
%非边缘处梯度值较小,F(i,j)等于1,J(i,j)基本等于九数之和,所以处理后的图像非边缘为白
subplot(221),imshow(Gx),title('x 方向的梯度图像');
subplot(222),imshow(Gy),title('y 方向的梯度图像');
subplot(223),imshow(uint16(J)),title('权重因子处理后的图像');
subplot(224),imshow(uint8(W)),title('梯度幅值图像');%可以凸出图像的边缘

%%计算一幅图像的平均梯度
%%平均梯度可敏感地反映图像对微小细节反差表达的能力,可用来评价图像的模糊程度
%%以此来衡量图像的清晰度,同时反映出图像中微小细节反差和纹理变换特征
diffX=zeros(M,N);% save the differential value of X orient
diffY=zeros(M,N);% save the differential value of Y orient

tempX=zeros(M,N);
tempY=zeros(M,N);
tempX(1:M,1:(N-1))=I(1:M,2:N);
tempY(1:(M-1),1:N)=I(2:M,1:N);

diffX=I-tempX;
diffY=I-tempY;
diffX(1:M,N)=0;       %%% the boundery set to 0,否则的话diffX最后一列保持与I一样;diffY最后一行与I一样
diffY(M,1:N)=0;
%计算平均梯度:((diffX.*diffX+diffY.*diffY)/2)/(m-1)*(n1)
diffX=diffX.*diffX;
diffY=diffY.*diffY;
diff=double((diffX+diffY))/2;
diff=sqrt(diff);
AVEGRAD=sum(sum(diff)); 
AVEGRAD=AVEGRAD/((M-1)*(N-1));





2016-05-01 12:06:32 qq_20823641 阅读数 11610
  • 数据分析快速实践:企业真实案例精讲

    本课目的是培养数据分析师和人工智能人才,紧跟Python及大数据技术,课程取材于企业一线真实需求,符合企业对热门技术的需求。 课程内容包括:NumPy 的用途与开发环境、数组对象、多维数组、索引与切片、数据类型、组合数组、分割数组、读取CSV 文件、算数平均值、加权平均值、统计学概念、针对时间的数据分析、数组的卷积运算、线性模型、ndarray 对象的方法、NumPy的便捷函数、多项式拟合、符号数组、矢量化、数据平滑等。并基于 matplotlib 的数据可视化内容,包括:简单绘图 、定制绘图、子坐标图、刻度定位、颜色填充、散点图、条形图、饼图、三维绘图、对数坐标图、图例和注释等。

    41 人正在学习 去看看 杨威

1、ConvolutionFiltering (卷积滤波

     卷积是一种滤波方法,它产生一幅输出图像(图像上,一个给定像元的亮度值是其周围像元亮度值加权平均的函数) 。

用户选择变换核用于图像列卷积生成一个新的空间滤波图像。

                                            

(1)选择 Filter > Convolutions > 一种滤波类型。

                                            

(2)出现对话框时,设置卷积参数 卷积滤波需要选择一个变换核的大小。多数滤波变换核呈正方形,默认的变换核大小是 3×3,在 “Size” 文本框里改变

变换核的大小。

        出现 Kernel Edit 对话框时,每一个变换核的值显示在各自的可编辑的文本框里,改变任何数值,点击要改变的值,键入新值,点击enter。

         注意:一些特别的滤波(如 Sobel 和 Roberts)有自己的默认值,是不能改变的。选择这些滤波时,不会出现变换核大小的选项。原始图像卷积结果中“Adding back” 部分有助于保持空间联系,代表性地被处理成尖锐化的图像。对原始图像的 “Add Back” 部分,在 “Add Back” 文本框里,键入一个 0.0 与 1.0之间的数(与原始图像的 0 到 100% 相对应)。

(1)点击Quick Apply出现对话框时,选择输入波段

                                       

         点击“OK”。在“Available Band List可用波段列表”出现临时文件,同时出现新的display窗口,显示滤波结果。

(3)或者点击Apply to file选择输入文件,点击“OK”,选择输入波段,输出方式,可选择输出到memory。在“availableBand List可用波段列表”出现memory文件,创建新的display窗口,显示滤波结果。

2、High Pass Filter (高通滤波器)

       高通滤波在保持高频信息的同时,消除了图像中的低频成分。可以用来增强不同区域之间的边缘,犹如使图像尖锐化。通过运用一个具有高中心值的变换核来完成(典型地周围是负值权重)。ENVI 默认的高通滤波用到的变换核是 3×3的(中心值为“8”,外部像元值为“-1”)。高通滤波变换核的大小必须是奇数。·实现这一功能,选择 Filters>Convolutions > High Pass。

3、Low Pass Filter (低通滤波器)

     低频滤波保存了图像中的低频成分。 ENVI 的低通滤波是通过对选择的图像运用 IDL“SMOOTH”函数进行的。这一函数用到了boxcar 平均,盒子的大小由变换核的大小决定,默认的变换核的大小是3x3。·实现这一功能,选择 Filters > Convolutions > LowPass.

4、Laplacian Filter (拉普拉斯滤波器)

      拉普拉斯滤波是第二个派生的边缘增强滤波,它的运行不用考虑边缘的方向。拉普拉斯滤波强调图像中的最大值,它用到的变换核的南北向与东西向权重

均为负值,中心为“0”。ENVI 中默认的拉普拉斯滤波用的是一个大小为3x3的,中心值为“4”,南北向和东西向均为“-1”的变换核。所有的拉普拉斯滤波变换核的

大小都必须是奇数。

5、Directional (直通滤波)

     直通滤波是第一个派生的边缘增强滤波,它选择性地增强有特定方向成分的图像特征。直通滤波变换核元素的总和是零。结果在输出的图像中有相同像元值

的区域均为0,不同像元值的区域呈现为亮的边缘。

  实现直通滤波:

(1)选择 Filters >Convolutions > Directional.

(2)除了 ConvolutionParameters 对话框中的标准的滤波调整项目以外,

    ENVI 直通滤波需要你在标有 “Angle” 的文本框里键入需要的方向(单位是度)。正北方是 0 度,其他角度按逆时针方矢量度。

6、Gaussian Filter (高斯滤波器)

    高斯滤波通过一个指定大小的高斯卷积函数对图像进行滤波。默认的变换核大小是3×3,且变换核的大小必须是奇数。选择“Gaussian High Pass” 或

“Gaussian Low Pass” 滤波。

7、Median Filter (中值滤波器)

    中值滤波在保留比变换核大的边缘的同时,平滑图像。ENVI 的中值滤波用一个滤波器大小限定的邻近区的中值(不要与平均值混淆)代替每一个中心像元

值。默认的变换核大小是3x3。 ·实现这一功能,选择Filters > Convolutions >Median。

8、Sobel 滤波器

   Sobel 滤波器是非线性边缘增强,它特别地用到了 Sobel 函数的近似值, 是一个预先设置了3×3的,非线性边缘增强的算子。滤波器的大小不能更改,也无

法编辑变换核的大小。实现这一功能,选择 Filters > Convolutions > Sobel。

9、Roberts 滤波器

    罗伯特滤波器是一个类似于 Sobel 的边缘探测器滤波。是一种特殊的滤波,运用 Roberts 函数预先设置的2×2的近似值。是一个简单的两维空间的差分方

法,用于边缘尖锐化和隔离。滤波器的大小不能被更改,也不能编辑变换核的大小。实现这一功能,选择 Filters > Convolutions > Roberts。

10、User Defined Convolution Filters (用户自定义的卷积滤波)

    可以通过选择和编辑一个用户变换核,定义习惯上用到的卷积变换核。选择 “Edit Kernel” 按钮,交互式地编辑默认值,改变个别滤波器的权重。




2019-05-08 11:23:11 weixin_43066495 阅读数 549
  • 数据分析快速实践:企业真实案例精讲

    本课目的是培养数据分析师和人工智能人才,紧跟Python及大数据技术,课程取材于企业一线真实需求,符合企业对热门技术的需求。 课程内容包括:NumPy 的用途与开发环境、数组对象、多维数组、索引与切片、数据类型、组合数组、分割数组、读取CSV 文件、算数平均值、加权平均值、统计学概念、针对时间的数据分析、数组的卷积运算、线性模型、ndarray 对象的方法、NumPy的便捷函数、多项式拟合、符号数组、矢量化、数据平滑等。并基于 matplotlib 的数据可视化内容,包括:简单绘图 、定制绘图、子坐标图、刻度定位、颜色填充、散点图、条形图、饼图、三维绘图、对数坐标图、图例和注释等。

    41 人正在学习 去看看 杨威

滤波器

  • 方框滤波——boxFilter
  • 均值滤波——blur
  • 高斯滤波——GaussianBlur
  • 中值滤波——medianBlur

线性滤波器

线性滤波器经常用于剔除输入信号中不想要的频率或者从许多频率中选择一个想要的频率。常见的有:低通、高通、带通、带阻、全通、陷波
每个信号的输出值是一些输入像素的加权和

  • 方框滤波——boxFilter
  • 均值滤波——blur (归一化后的方框滤波)
  • 高斯滤波——GaussianBlur

非线性滤波器

  • 中值滤波——medianBlur
    在处理类似于椒盐噪声这种散粒噪声时,使用中值滤波有时可以达到更好的效果
    优势: 在均值滤波中,由于噪声成分被放入平均计算中,所以输出受到了噪声的影响。但是在中值滤波器中,由于噪声成分很难选上,所以几乎不会受影响。
    劣势: 中值滤波花费的时间是均值滤波的5倍以上。

代码演示

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;

int main()
{
	Mat src = imread("G:/picture/cs.jpg");
	if (src.empty())
	{
		cout << "could not load image..." << endl;
	}
	Mat roi;
	//修改图像大小
	resize(src, roi, Size(300, 300));
	//遍历每个像素,用at()函数为随机选取的像素点赋一个随机值
	for (int i = 0; i < roi.rows; i++)
	{
		for (int j = 0; j < roi.cols; j++)
		{
			//当导入的时灰度图
			if (roi.channels() == 1)
			{
				if (rand() % roi.cols == j)
				{
					roi.at<uchar>(i, j) = rand() % 255;  //模上255是为了将随机值限定在(0,255)内
				}	
			}
			//当导入彩色图
			else if (roi.channels() == 3)
			{
				if (rand() % roi.cols == j)
				{
					Vec3b p;
					p[0] = rand() % 255; 
					p[1] = rand() % 255;
					p[2] = rand() % 255;
					roi.at<Vec3b>(i, j) = p;
				}
			}
		}
	}
	Mat median,gaussian,avgblur;
	blur(roi, avgblur, Size(3, 3));//均值
	GaussianBlur(roi, gaussian,Size(3,3),0,0);//高斯
	medianBlur(roi, median, 3);//中值
	imshow("roi",roi);
	imshow("blur", avgblur);
	imshow("Gaussian", gaussian);
	imshow("medianBlur", median);
	waitKey(100000);
	return 0;
}
	

输出结果

  • 椒盐噪声图(roi)
    在这里插入图片描述
  • 均值
    在这里插入图片描述
  • 高斯滤波
    在这里插入图片描述
  • 中值滤波效果图
    在这里插入图片描述
    可以看到,线性滤波器(均值、高斯)处理之后图中仍可以看到“斑点”,而中值滤波则完美的达到“磨皮”效果,由此得出在处理椒盐噪声是应选择中值滤波。
没有更多推荐了,返回首页