我有一张大小为(1200 X 1000)的图像,并且正在创建多个色块(使用256 X 256的滑动窗口,跨度为10)。我的最终目标是为卷积神经网络提供补丁。我希望对图像产生的色块引入一些盐和胡椒粉噪声。该图像不过是网页的屏幕截图。现在,我希望确保所添加的盐和胡椒粉噪声不会落在所生成补丁的HTML对象区域上。例如假设我在补丁程序中有单选按钮,文本框,选择下拉菜单和按钮,我需要确保生成的噪声不应落在补丁程序中的这些对象上。除此之外,它可能落在补丁程序中的任何其他区域内。
我已经编写了有关盐和胡椒粉噪音的代码,如下所示:
import numpy as np
import os
import cv2
def noisy(image):
row,col,ch = image.shape
s_vs_p = 0.5
amount = 0.004
out = image
# Salt mode
num_salt = np.ceil(amount * image.size * s_vs_p)
coords = [np.random.randint(0, i - 1, int(num_salt))
for i in image.shape]
out[coords] = 1
# Pepper mode
num_pepper = np.ceil(amount* image.size * (1. - s_vs_p))
coords = [np.random.randint(0, i - 1, int(num_pepper))
for i in image.shape]
out[coords] = 0
return out
我在json文件中具有html对象的坐标,并已将其读取并存储到程序中的对象列表中。它包含HTML对象的X坐标,Y坐标,宽度,高度和类型。
我创建了一个标签矩阵,它是原始图像的副本,具有5个类:
0:这是默认的类值(即是图像区域,不包括HTML对象)
1:它是存储在图像中文本框矩阵中的值
2:它是图像中Button矩阵中存储的值
3:它是图像中RadioButton矩阵中存储的值
4:它是存储在矩阵中以供图像选择的值
因此,每个值都将代表我的Label Matrix中屏幕截图图像的特定HTML对象。
现在,使用标签矩阵,如何确保盐和胡椒粉的噪声不会落在所创建补丁中的HTML对象的区域中,这是我面临的挑战。
最佳答案
这有点粗糙,但是为什么不将噪点均匀地应用到原始图片的副本上,然后将原始图像中每个对象的补丁复制回该噪点图像的顶部呢?
改掉问题后的编辑
基本上,您需要测试coords
是否落在您的蒙版(“标签矩阵”)等于0的地方。
这是您可以做的(或类似的事情,我不能说我的代码很漂亮):
out = np.zeros((26,26))
# salt coordinates
coords = [np.random.randint(0,26,50), np.random.randint(0,26,50)]
# mask - 0 are regions where salt can be applied, otherwise don't touch
mask = np.zeros(out.shape)
mask[:13,:13] = 1
mask[-13:,-13:] = 2
# where does the salt coordinates land on the mask
a = mask[coords]
# find points where mask is 0
b, = np.nonzero(a==0)
# copy from coords only where mask is 0
valid_coords = np.array(coords)[:,b]
# apply salt on valid coordinates
out[valid_coords.tolist()]=1
关于python - 如何使用python将盐和胡椒粉噪声仅应用于图像的特定部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38975969/