python - 如何使用python将盐和胡椒粉噪声仅应用于图像的特定部分?

标签 python opencv numpy image-processing

我有一张大小为(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

enter image description here

关于python - 如何使用python将盐和胡椒粉噪声仅应用于图像的特定部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38975969/

相关文章:

python - 栅格化 GDAL 层

Python高级切片

python - 没有异常时将回溯打印到文件

image - 二值化图像中的单独交叉线段

opencv - 如何找到帧类型(i 帧、p 帧、b 帧)?

c++ - OpenCV 2.4.3 中的阴影去除

python - 计算最接近的数字numpy

python - 使用 scikit-image 将 numpy 数组保存为高精度(16 位)图像

python - SciPy 稀疏矩阵上的 numpy.allclose()

python - django-admin.py startproject mysite 在 Windows 7 上运行不正常