首页 > 编程知识 正文

列举5种常用的图像处理软件,列举几种图像处理软件

时间:2023-05-05 01:23:25 阅读:150989 作者:488

平均滤波

均值滤波是图像处理中最常用的手段,从频域的角度来看,均值滤波是低通滤波,它能消除高频信号,有助于消除图像的尖锐噪声,实现图像平滑、模糊等功能。 理想的平均滤波方法是用根据每个像素及其周围的像素计算出的平均值替换图像中的每个像素。 采样Kernel数据通常是3X3矩阵,表示为:

从左到右从上至下计算图像中的各个像素,最终得到处理后的图像。 可以向平均过滤添加两个参数:迭代次数和Kernel数据大小。 虽然是同样的Kernel,但是多次重复的话效果会增加。 同样,迭代次数相同的话,核矩阵越大,平均滤波的效果越明显。

中值滤波器是用于去除图像噪声的最常用手段之一,并且尤其是当去除椒盐噪声时,中值滤波器比平均滤波器更有效。 中值滤波器与平均值滤波器唯一的不同在于,它对周围像素和中心像素进行排序,然后取中值,而不是用平均值替换中心像素。 33大小的中值滤波器如下所示。

最大最小值滤波器和中值滤波器同样,首先对周围的像素和中心的像素值进行排列,接下来将中心的像素值与最小和最大的像素值进行比较,如果小于最小值则将中心的像素置换为最小值,如果大于最大值则将中心的像素置换为最大值Kernel矩阵为3X3的最大最小值滤波如下:

双边滤波器的一种因为同时考虑了像素空间差异与强度差异的滤波器,所以具有保持图像边缘的特性。

让我们先看看kkdgtx过滤器

其中,w是权重,I和j是像素索引,k是归一化常数。 由公式可知,权重只与像素间的空间距离相关,无论图像内容是什么,都具有相同的滤波效果。

让我们看看双边滤波器。 那只是在原来的kkdgtx函数上加了一项。 如下所示

其中I是像素的强度值,因此在强度差较大的地方(边缘),权重变小,过滤效果也变小。 总体上,在像素强度转换不大的区域中,双边滤波器具有类似kkdgtx滤波的效果,为图像边缘等强度梯度较大的地方,可以保持梯度

导向滤波器和双边滤波器最大的相似之处是同样保持边缘特性。 引导过滤的

定义中,用到了局部线性模型,至于该模型,可以暂时用下图简单的理解


该模型认为,某函数上一点与其邻近部分的点成线性关系,一个复杂的函数就可以用很多局部的线性函数来表示,当需要求该函数上某一点的值时,只需计算所有包含该点的线性函数的值并做平均即可。这种模型,在表示非解析函数上,非常有用。

同理,我们可以认为图像是一个二维函数,而且没法写出解析表达式,因此我们假设该函数的输出与输入在一个二维窗口内满足线性关系,如下


其中,q是输出像素的值,I是输入图像的值,i和k是像素索引,a和b是当窗口中心位于k时该线性函数的系数。其实,输入图像不一定是待滤波的图像本身,也可以是其他图像即引导图像,这也是为何称为引导滤波的原因。对上式两边取梯度,可以得到


即当输入图像I有梯度时,输出q也有类似的梯度,现在可以解释为什么引导滤波有边缘保持特性了。

下一步是求出线性函数的系数,也就是线性回归,即希望拟合函数的输出值与真实值p之间的差距最小,也就是让下式最小


这里p只能是待滤波图像,并不像I那样可以是其他图像。同时,a之前的系数(以后都写为e)用于防止求得的a过大,也是调节滤波器滤波效果的重要参数。通过最小二乘法,我们可以得到


其中,是I在窗口w_k中的平均值,是I在窗口w_k中的方差,是窗口w_k中像素的数量,是待滤波图像p在窗口w_k中的均值。

在计算每个窗口的线性系数时,我们可以发现一个像素会被多个窗口包含,也就是说,每个像素都由多个线性函数所描述。因此,如之前所说,要具体求某一点的输出值时,只需将所有包含该点的线性函数值平均即可,如下


这里,w_k是所有包含像素i的窗口,k是其中心位置。

当把引导滤波用作边缘保持滤波器时,往往有 I = p ,如果e=0,显然a=1, b=0是E(a,b)为最小值的解,从上式可以看出,这时的滤波器没有任何作用,将输入原封不动的输出。如果e>0,在像素强度变化小的区域(或单色区域),有a近似于(或等于)0,而b近似于(或等于),即做了一个加权均值滤波;而在变化大的区域,a近似于1,b近似于0,对图像的滤波效果很弱,有助于保持边缘。而e的作用就是界定什么是变化大,什么是变化小。在窗口大小不变的情况下,随着e的增大,滤波效果越明显。

在滤波效果上,引导滤波和双边滤波差不多,在一些细节上,引导滤波较好。引导滤波最大的优势在于,可以写出时间复杂度与窗口大小无关的算法,因此在使用大窗口处理图片时,其效率更高。


def guidedfilter(I,p,r,eps): '''I:引导图图; p:输入图(p=I); r :半径: eps:regulation f:为窗口半径为r的均值滤波器; corr:相关; var:方差; cov:协方差 ''' height,width = I.reshape() m_I = cv2.boxFilter(I,-1,(r,r)) #f_mean(I) 均值滤波blur和盒式滤波一样 m_p = cv2.boxFilter(p,-1,(r,r)) #f_mean(p) m_II = cv2.boxFilter(I*I,-1,(r,r)) #f_mean(I.*I) m_Ip = cv2.boxFilter(I * p, -1, (r, r)) #f_mean(I.*p) var_I = m_II-m_I*m_I #求方差:corr_I -mean_I.*mean_I cov_Ip = m_Ip - m_I * m_p #协方差: #cov_Ip-mean_I.*mean_p a = cov_Ip/(var_I+eps) #cov_Ip./(var_I+eps) b = m_p-a*m_I #mean_p -a.*mean_I m_a = cv2.boxFilter(a,-1,(r,r)) #mean_a m_b = cv2.boxFilter(b,-1,(r,r)) #mean_b return m_a*I+m_b

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。