继 -- 图像快速模糊算法

算法结构  = 扫描线种子填充算法 + 模糊模板移动法

 该算法的优点在于没有重复读取图像中的像素信息,使用的滤波模板是 m[3][3]={1,1,1,1,1,1,1,1,1},主要用到了线扫描法和移动滤波法,用于封闭区域图形的快速模糊,线扫描法用于确定边界,移动滤波法大大提高了运行速度。

1.扫描线种子填充法:

扫描线种子填充算法的基本过程如下:当给定种子点(x, y)时,首先分别向左和向右两个方向填充种子点所在扫描线上的位于给定区域的一个区段,同时记下这个区段的范围[xLeft, xRight],然后确定与这一区段相连通的上、下两条扫描线上位于给定区域内的区段,并依次保存下来。反复这个过程,直到填充结束。

扫描线种子填充算法可由下列四个步骤实现:

(1) 初始化一个空的栈用于存放种子点,将种子点(x, y)入栈;

(2) 判断栈是否为空,如果栈为空则结束算法,否则取出栈顶元素作为当前扫描线的种子点(x, y),y是当前的扫描线;

(3) 从种子点(x, y)出发,沿当前扫描线向左、右两个方向填充,直到边界。分别标记区段的左、右端点坐标为xLeft和xRight;

(4) 分别检查与当前扫描线相邻的y - 1和y + 1两条扫描线在区间[xLeft,xRight]中的像素,从xLeft开始向xRight方向搜索,若存在非边界且未填充的像素点,则找出这些相邻的像素点中最右边的一个,并将其作为种子点压入栈中,然后返回第(2)步;

 2.模糊模板移动法:

模板半径:radius,      

模板数量:sum    (一般点sum=r*r  边界点sum<r*r)

图像宽度:w,  高度:h

数组arr[w+r],变量count存放模板上的像素和

①  给出位于封闭图形内的一点p(x0,y0),该点位置入栈;

②  判断栈是否为空?不为空则取出栈顶元素,作为扫描线种子点

③  Y1=y0,扫描至左l,右R,此时读取宽为j∈(0,w),高为i∈(Y1-radius,Y1+radius)上的像素值,记录在arr[i]中,像素个数为count,这一方形内像素和为sum,原点P(x0,y0)处像素为pixel(x0,y0)= sum/count;对于该行上的p1(x0+1,y0)像素点使用移动法:sum = sum+arr[right]-arr[left],依次类推,对属于扫描线内的点依次计算

 

④  由扫描算法可知,每次扫描到新的边界点都会入栈,直到最后将封闭图形内都模糊完毕,当一行的像素都计算完毕后,开始计算上下行(根据上下入栈顺序会决定先扫描上半部分还是下半部分),当上下移动模板时,Y1=y0+1,先读取高i∈(Y1-radius,Y1+radius),即只要新读取y0+radius+1这一行的像素值即可,新的arr[i]=arr[i]-pixel(y0-radius-1)+pixel(y0+radius+1),计算该行模糊后像素值如③步骤所示;

 

⑤  上半部分的像素模糊计算会重复③④步骤,直到上半部分结束;

 

⑥  开始计算下半部分时,此时栈顶有一个元素,即原点p(x0,y0)的下一行边界点,同样,下半部分的计算同上半部分相同;

 

⑦  封闭图形内所有像素点被扫描和模糊完毕,该封闭图像被模糊完毕;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值