图像处理的预热知识-卷积

       为了接下来要讲的图像的滤波和边缘处理,这里介绍详细介绍下一维、二维卷积操作的过程。这里我不一开始就拿出公式,从其物理意义入手可能会更好理解,其中可能会涉及一些概念,我没具体展开的、想要深入了解的朋友请自行百度,这里重点介绍卷积的整个思想、过程,应用将在下一节介绍。

-------------------------------------------------------------------以上都是废话,下面才是重点-----------------------------------------------------------------

  • 基本概念:

线性时不变系统:具有叠加性、齐次性,且输出特性不会因输入时间的不同而改变的系统。

单位冲激函数:仅在t=0时刻为函数值为1;其余为0。

单位阶跃函数:t>=0时,函数值为1;其余为0。

单位冲激响应:在单位冲激信号下的输出,表示为h(t)。为什么有这个定义呢?其实就是因为:某个时刻的输入信号,都可以用单位冲激函数的权值表示,比如,t=10s,输入为9,那么可以表示为9个h(t)叠加.这样很容易表示各个时刻的响应。

  • 一维卷积       

假设:有一个离散信号x[t]和一个线性是不变系统的响应为h[t],表示如下图:

那么,我们这样想:在t=0时刻,输入x[0]=1,我能得到右图的输出h[t];在t=1时刻x[1]=1,如果不考虑之前的输入,我还是能够得到幅值一样,仅仅是时间推迟了1秒的输出h'[t]。但由于t=0时刻的输入,响应持续到了之后的时刻,所以总的输出响应需要叠加,这就有了下图:

所以,总的y[t]就是卷积输出。这里给出matlab的计算结果。

-----------------------------------------------------------------分隔符,内容稍多,可以先稍微消化下-----------------------------------------------------

        这样,我们的确得出了全部的输出。但是有个问题,那就是各个时刻的输出值的表示方法式怎么样的?因为当我们编程时,如果我们把每次输入产生了的所有响应计算出来,再把所有输入产生的响应叠加,将会是麻烦的事情。接下来,我们尝试另外一个角度看卷积的过程。

        在上面的计算方法中,我们考虑的是每次输入的全部响应。下面让我们仅仅考虑当前输入产生的响应:这样,我们尝试重新理解下冲激响应:        

       我们把冲激响应看成是一个线性时不变系统。定义初始时刻t=0,那么某时刻的响应y[t]:就是当前时刻产生的响应与之前产生所影响到t时刻的响应的叠加。比如上图中t=1时产生的响应就是:x[0]在t=1产生的响应和x[1]产生的响应的叠加。 1+1=2;在t=3时刻,x[0]产生的响应影响不了,所以只有x[1]产生的响应分量,0+1=1。  

       那么我们按照这个思路去总结下这个公式:还是以上图的x[t]和h[t]来表示

       当t=0时,y[0]的输出就是x[0]与x[1]在t=0产生的响应分量的叠加:

       y[0]=x[0]*h[0-0]+x[1]*h[0-1]=x[0]*h[0]+x[1]*h[-1]=1;      //h[0-0]:表示为0时刻输入信号产生的响应在t=0时刻的分量

                                                                                             //h[0-1]:表示在1时刻输入信号产生的响应在t=0时刻的分量

   那:y[1]=x[0]h[1-0]+x[1]h[1-1]=x[0]h[1]+x[1]h[0]=2

       y[2]=x[0]h[2-0]+x[1]h[2-1]=x[0]*h[2]+x[1]h[1]=1

       y[3]=x[0]h[3-0]+x[1]h[3-1]=x[0]*h[3]+x[1]h[3-1]=1*0+1*1=1,其余的就都是0了,如果有兴趣的同学可以自行尝试计算。

是时候统一出表达式了:

    假设:有个x[t]输入,线性时不变系统的冲击响应为h[t],则产生的输出为:

   

t表示某时刻。  

x[k]表示输入序列(此处是离散的,连续的用x(t).此处主要讨论离散信号);

h[t-k]:第k时刻的输入序列产生的响应在t时刻的分量(可以认为是响应的平移)。

y[t]就表示为t时刻的响应的总和。    

(有些朋友可能很困惑这个求和符号,但请仔细思考下,它已经是最简单的形式了)。

在这里把公式给出大家不是让大家去用这个公式去计算卷积,而是希望大家体会这个公式的思想所在。从而引出二维卷积的过程

-------------------------------------------------------------分割符,休息下---------------------------------------------------------------------------------------

上面我们已经得出了一维卷积的表达式,二维卷积如下:

  • 基本概念:

图片是一张平面,用二维函数f(x,y)表示。

邻域:在二维这里,一个像素与相邻的像素之间的四邻域和八邻域等关系。(非常重要的概念,请大家自行查阅相关资料)

四邻域关系为 :(x+1,y),(x-1,y),(x,y+1),(x,y-1);可以看成是当前像素的:上下左右的四个像素形成邻域关系。

八邻域关系为:(x-1,y-1),(x-1,y),(x-1,y+1),(x,y-1),(x,y+1),(x+1,y-1),(x+1,y),(x+1,y+1);可以看成是当前像素的:环绕周围的八个像素点之间形成邻域关系。

滤波器的核(kernel)大小:很多地方直接说kernel为3*3,2*2,5*5,  指的就是滤波器的核的排列。很多地方也称为算子。sobel,canny算子,就是指的滤波器的种类。

 

  (x,y+1)

 

  (x-1,y)

   (x,y)

  (x+1,y)

 

  (x,y-1)

 

      上图为2*2的kernel,(x,y)为当前操作的点

(x-1,y+1)

(x,y+1)

(x+1,y+1)

(x-1,y)

(x,y)

(x+1,y)

(x-1,y-1)

(x,y-1)

(x+1,y-1)

     上图为3*3的kernel,(x,y)为当前操作的点

  

  • 二维卷积

假设:我们有一样图像f(x,y),并与一个滤波器w(x,y)进行卷积操作,将表示如下

 

可能有朋友会问:一维的是h[t-k],这里怎么变成f(x-a,y-b)?其实是一样的,一维的式子遍历 但是x[k];而此处遍历的是(a,b),像素点的位置在改变。

这里的物理意义是:一个kernel把压在图像灰度值的的乘积的求和的值为kernel中心的值。

最终像素为67上的点将会变成:answer=1/9*(32+34+45+32+67+98+15+37+172)=59.111..

这里有几个要注意的地方:

1、当计算的结果大于255时,认为是255;小于0时,认为是0;

2、边缘上不足以提供足够的点进行计算:

有两种办法:1、对于大图像,可舍去计算边缘上的点。但这方法总是不服责任的。

                      2、采用最近邻插值的方法,先人为的加上一圈与边缘上的灰度值相同的点。计算完后再舍去。

3、(重要)因为考虑的是中心点作为原点(0,0),所以kernel的左下角位置为(-1,-1),右上角的位置为(1,1);如果直接计算,将会得到:

对于左下角f(x-(-1),y-(-1))*w(-1,-1),那么将会是原图像中心点的右上角与kernel左下角进行了计算。

   所以,必须向将kernel颠倒180°,再进行计算。

--------------------------------------------------------------完毕,结束语----------------------------------------------------------------------------------

这里的例子我都是举的比较简单的,想深究的朋友可以查阅相关资料。

接下来,将讨论滤波操作。

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

穿着凉鞋走天下

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值