- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我实现了一个基本上应用内核的平滑算法:
[0 1 0;
1 4 1;
0 1 0]/8
转化为一个矩阵(图像)然后进行边角校正,相当于设置kernel为
[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
最佳答案
这是一种使用线性卷积加上一些技巧来保持干净边缘的方法。该技巧基本上是通过与逆掩码卷积并将其添加到原始结果来计算边缘丢失的质量:
import numpy as np
from scipy.signal import convolve2d
kernel = np.add.outer(*2*(np.arange(3) % 2,))**2 / 8
def perfect_edges(orig, n_iter=1, thresh=20):
mask = orig <= thresh
corrector = convolve2d(mask, kernel, 'same')
result = orig.copy()
result[mask] = 0
for j in range(n_iter):
result = result * corrector + convolve2d(result, kernel, 'same')
result[mask] = 0
result = np.round(result).astype(np.uint8)
result[mask] = orig[mask]
return result
picture = (np.add.outer(*2*(np.arange(-6, 7)**2,)) < 30).view(np.uint8) * 118
picture += np.random.randint(0, 21, picture.shape, dtype=np.uint8)
print(picture)
print()
print(perfect_edges(picture, 200))
样本运行:
[[ 15 0 4 10 17 13 20 12 14 1 5 16 19]
[ 1 6 9 14 132 132 129 128 135 1 5 11 5]
[ 13 16 6 126 118 118 134 120 130 138 2 6 10]
[ 16 3 129 129 128 129 125 134 131 132 127 18 8]
[ 10 120 132 125 128 120 133 137 125 120 124 129 7]
[ 10 137 119 120 119 118 137 135 135 126 118 128 0]
[ 17 134 138 133 134 121 124 119 134 138 133 129 2]
[ 3 134 136 132 119 124 123 133 126 121 126 122 19]
[ 3 123 130 123 125 125 128 119 119 129 119 127 6]
[ 5 0 119 118 125 122 135 135 126 133 136 7 3]
[ 11 1 13 124 121 118 136 137 127 137 2 19 15]
[ 6 7 15 19 132 132 130 125 130 9 18 9 12]
[ 16 20 0 14 9 10 1 6 5 17 16 0 3]]
[[ 15 0 4 10 17 13 20 12 14 1 5 16 19]
[ 1 6 9 14 128 128 128 128 128 1 5 11 5]
[ 13 16 6 128 128 128 128 128 128 128 2 6 10]
[ 16 3 128 128 128 128 128 128 128 128 128 18 8]
[ 10 128 128 128 128 128 128 128 128 128 128 128 7]
[ 10 128 128 128 128 128 128 128 128 128 128 128 0]
[ 17 128 128 128 128 128 128 128 128 128 128 128 2]
[ 3 128 128 128 128 128 128 128 128 128 128 128 19]
[ 3 128 128 128 128 128 128 128 128 128 128 128 6]
[ 5 0 128 128 128 128 128 128 128 128 128 7 3]
[ 11 1 13 128 128 128 128 128 128 128 2 19 15]
[ 6 7 15 19 128 128 128 128 128 9 18 9 12]
[ 16 20 0 14 9 10 1 6 5 17 16 0 3]]
关于python - numpy 掩蔽平滑算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48917761/
我正在尝试弄清楚如何屏蔽相对路径上的路径。这是我为 CSS 文件实现的自定义缩小器脚本,需要绝对相对路径。 假设我在 CSS 文件中有以下内容 url('../images/file.jpg') 这个
我正在尝试在我的 WordPress 图片/帖子中创建以下内容。 我也需要它具有响应能力,所以我使用了 Bootstrap 3 和背景图片。 帖子的代码片段: Titl
在考虑如何优化方面,我仍然是一个成熟的人。我有这部分代码,它接受已找到的峰的列表,并找到这些峰,+/- 某个值,位于多维数组中的位置。然后它将 +1 添加到它们的 zeros 数组的索引中。代码运行良
我正在使用 DirectX 9 开发游戏。这是我正在尝试做的事情: 渲染场景后,我想在它上面渲染一些 Sprite :整个场景上的黑色覆盖物和一些 Sprite ,它们是显示覆盖物应该有孔的蒙版。到目
有一个丰富的 UI 应用程序,我想在其中显示像这样复杂形状的图像 现在我想要的是根据蒙版图像裁剪我的图像,实际上 图像是动态的,可以从相机或图库(正方形或矩形形状)导入,我希望该图像适合在我上面的布局
我试图在谷歌地图应用程序上应用聚光灯效果。具体来说,我画了一个跟随鼠标的圆圈,并将其设置为 map 上的 mask 。问题是只显示了圆圈内的 map 区域,我知道它应该是面具的样子,但是有没有办法让圆
我正在使用 OpenGL/GLSL 实现一个绘图应用程序。有一个功能,用户可以使用带有图案图像的画笔绘制“蒙版”,同时背景会根据画笔的位置而变化。看看视频就明白了:video 我使用 CALayer
我正在尝试使用 HTML 和 CSS 创建一个“眨眼”动画。 我想要的是,当眼睛眨眼时,眼球不显示。 从代码中可以看出,眼睛由 4 个元素组成。 Div“眼睛”是眼睛所在的容器。 划分“eye1”和“
我正在尝试渲染 3 种纹理,-背景- 黑/白前景 mask -前景 我用过这个OpenGL - mask with multiple textures因为它准确地描述了我的问题。但我无法让它工作。我只
我正在尝试使用具有不同时间长度的序列在 Keras 中拟合 RNN。我的数据位于格式为 (sample, time, feature) = (20631, max_time, 24) 的 Numpy
所以,我想屏蔽 SparseTensor 的整行。使用 tf.boolean_mask 很容易做到这一点,但没有与 SparseTensor 等效的方法。目前,我可以只遍历 SparseTensor.
我正在尝试快速屏蔽图像。这是我的代码: (通常,originalImg 是从 UIImagePickerController 加载的图像,然后由 UIGraphicsGetImageFromCurre
我正在尝试使用 System.Drawing.Graphics 使用源 Bitmap 和 alpha 掩码 Bitmap 绘制图像目的。目前我循环 X 和 Y 并使用 GetPixel 和 SetPi
我是一名优秀的程序员,十分优秀!