使用Python和Numpy将RGB图像与custon neighbout内核进行卷积

Guilherme Defreitas

我正在尝试实现一种算法来验证RGB图像的4个相邻像素(上,下,左和右),如果所有像素RGB值都相等,则将输出图像中的一个像素标记为1,否则它将是0.非向量化的实现是:

def set_border_interior(img):
  img_rows = img.shape[0]
  img_cols = img.shape[1]
  res = np.zeros((img_rows,img_cols))
  for row in xrange(1,img_rows-1):
      for col in xrange(1,img_cols-1):
          data_b = set()
          data_g = set()
          data_r = set()
          up = row - 1
          down = row + 1
          left = col - 1
          right = col + 1

          data_b.add(img.item(row,col,0))
          data_g.add(img.item(row,col,1))
          data_r.add(img.item(row,col,2))

          data_b.add(img.item(up,col,0))
          data_g.add(img.item(up,col,1))
          data_r.add(img.item(up,col,2))

          data_b.add(img.item(down,col,0))
          data_g.add(img.item(down,col,1))
          data_r.add(img.item(down,col,2))

          data_b.add(img.item(row,left,0))
          data_g.add(img.item(row,left,1))
          data_r.add(img.item(row,left,2))

          data_b.add(img.item(row,right,0))
          data_g.add(img.item(row,right,1))
          data_r.add(img.item(row,right,2))

          if (len(data_b) == 1) and (len(data_g) == 1) and (len(data_r) == 1):
              res.itemset(row,col, False)
          else:
              res.itemset(row,col, True)
  return res

这种非矢量化的方式,但是它确实很慢(甚至使用img.item读取数据和使用img.itemset设置新值)。是否有更好的方法可以在Numpy(或scipy)中实现呢?

海梅

抛开边界,无论如何您的函数定义都不明确,您可以执行以下操作:

import numpy as np
import matplotlib.pyplot as plt

rows, cols = 480, 640
rgb_img = np.zeros((rows, cols, 3), dtype=np.uint8)

rgb_img[:rows//2, :cols//2] = 255

center_slice = rgb_img[1:-1, 1:-1]
left_slice = rgb_img[1:-1, :-2]
right_slice = rgb_img[1:-1, 2:]
up_slice = rgb_img[:-2, 1:-1]
down_slice = rgb_img[2:, 1:-1]

all_equal = (np.all(center_slice == left_slice, axis=-1) &
             np.all(center_slice == right_slice, axis=-1) &
             np.all(center_slice == up_slice, axis=-1) &
             np.all(center_slice == down_slice, axis=-1))

plt.subplot(211)
plt.imshow(rgb_img, interpolation='nearest')
plt.subplot(212)
plt.imshow(all_equal, interpolation='nearest')
plt.show()

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用偶数大小的内核进行图像卷积

来自分类Dev

使用Scipy进行图像卷积:移位身份内核-计算如何完成?

来自分类Dev

使用for循环opencv python对图像进行卷积

来自分类Dev

需要pytorch帮助一次对N个内核的N个图像进行2D卷积

来自分类Dev

创建一个python卷积内核

来自分类Dev

使用VHDL对信号进行卷积

来自分类Dev

使用 Keras 进行特征卷积

来自分类Dev

使用numpy进行简单卷积的意外结果

来自分类Dev

将2D矩阵中的多个1D信号与2D矩阵中的多个1D内核进行卷积

来自分类Dev

卷积-对偶数和奇数大小进行反卷积

来自分类Dev

仅使用NumPy的Python图像卷积

来自分类Dev

分别对 4 个图像进行卷积

来自分类Dev

使用fft进行系统输出的线性卷积

来自分类Dev

使用keras以零均值进行卷积

来自分类Dev

如何使用傅立叶级数进行卷积

来自分类Dev

使用平均内核进行图像处理

来自分类Dev

为什么与内核进行卷积有效?

来自分类Dev

在共享内存中上传数据以进行卷积内核

来自分类Dev

内核-使用sed进行替换

来自分类Dev

内核-使用sed进行替换

来自分类Dev

将卷积层添加到CNN以进行NLP分析

来自分类Dev

是否有确定卷积层和池化层内核大小的标准?

来自分类Dev

在Python中使用fft2进行“有效”和“完全”卷积

来自分类Dev

在Python中使用fft2进行“有效”和“完全”卷积

来自分类Dev

使用英特尔MKL进行3D卷积

来自分类Dev

使用共享内存与CUDA进行3D卷积

来自分类Dev

在python中将具有三个内核(x,y,z)的3D阵列卷积

来自分类Dev

在python-pillow中具有大于5x5的内核大小的卷积

来自分类Dev

与未填充内核的卷积

Related 相关文章

热门标签

归档