【发布时间】:2018-08-01 17:36:29
【问题描述】:
我有一个基本应用内核的平滑算法:
[0 1 0;
1 4 1;
0 1 0]/8
到一个矩阵(图像),然后校正边缘和角落,相当于将内核设置为
[0 1 0;
0 5 1;
0 1 0]/8
对于左边缘,并且
[0 0 0;
0 6 1;
0 1 0]/8
用于左上角。
我现在的目标是应用仅适用于该图像的蒙版部分的平滑处理。例如(参考下图),如果我有一个磁盘的方形图像,磁盘的值为 128+-10(+-10 是噪声效果),背景为黑色(值为 0) ,无限次应用的法线平滑算法应该给出具有恒定像素强度的正方形图像。对于蒙版平滑算法,我想对磁盘进行蒙版,以便无限次应用的算法应该在 128 和黑色 (0) 背景处给出一个均匀的磁盘。换句话说,只有磁盘被平滑了。
我要避免的主要事情是背景“渗入”磁盘,使磁盘的边缘变得模糊。我也愿意将平滑算法更改为不同的算法(例如,平均 3x3 像素),以实现更有效的方法。
这是我的正常平滑代码:
def SmoothImage(Matrix,N=1):
'''Smooths a Matrix with kernel [0 1 0; 1 4 1; 0 1 0]/8'''
A=Matrix.copy()
for i in range(N):
s=A.shape[0]-1
B=A*4.0
B[-s:,:]+=A[:s,:]
B[0,:]+=A[0,:]
B[:,-s:]+=A[:,:s]
B[:,0]+=A[:,0]
B[:s,:]+=A[-s:,:]
B[-1,:]+=A[-1,:]
B[:,:s]+=A[:,-s:]
B[:,-1]+=A[:,-1]
B*=1/8
A=B
return A
【问题讨论】: