如何查找一组RGB图像中最常见的像素值(黑色像素除外)?

rick

我从语义分割过程中也获得了大量大型图像(5000、10000、3通道,RGB)。我正在尝试为每个像素(完整集的每个像素的模式)创建具有最大“公共”值的新图像。这些图像有一些特殊性。首先,它们具有相同的大小,但是有时包含黑色像素,这些黑色像素表示任何信息,因此必须从模式计算中排除。合并所有图像集,我将能够定义最常见的像素颜色元组(r,g,b),并将此信息存储为没有黑色像素的新图像。

我尝试过使用scipy stats.mode分析np.array图像列表,但是此方法未将(0,0,0)元组nan_policy='omit',因此计算后返回黑色图像。毕竟,(0,0,0)是最频繁的像素颜色。

我也尝试用(0,0,0)一个'nan'替换元组,但是ram的使用速度非常快并且效率不高。

谁能给我一些实现该统计数据的矢量化方法的提示?

谢谢!

一些示例图像:img1 img2 img3 img4

汉光年会

听起来您将混合的元组和nan值存储在numpy数组中。这不是很有效,因为那是一个对象数组,需要分别处理每个像素的内存分配。

最好将每个RGB元组转换为一个(整数)浮点值。单精度浮点数最多可以存储整数,而2**24-1不会损失精度。这足以存储24位RGB值。

这是处理5张50x100像素图像的方法。

from scipy.stats import mode as stats_mode

ny, nx = 50, 100
imgs = np.random.randint(255, size=(5, ny, nx, 3), dtype=np.uint8)
imgs[:3, ny//2, nx//2, :] = 0 # ignore thsee
imgs[3:, ny//2, nx//2, :] = [255, 255, 254] # find this

my = 10 # slice size - must divide ny
mode_img = np.zeros((ny, nx, 3), dtype=np.uint8)

flt_imgs = np.zeros((5, my, nx), dtype=np.float32)
for iy in range(0, ny, my):
    yslice = slice(iy, iy+my)

    flt_imgs[:] = imgs[:, yslice, :, 0]*(256*256)
    flt_imgs += imgs[:, yslice, :, 1]*256
    flt_imgs += imgs[:, yslice, :, 2]
    flt_imgs[flt_imgs == 0] = np.nan

    mode_result = stats_mode(flt_imgs, axis=0, nan_policy='omit')
    imode = mode_result.mode[0].astype(np.int32)
    mode_img[yslice, :, 0] = (imode >> 16) & 0xff
    mode_img[yslice, :, 1] = (imode >> 8) & 0xff
    mode_img[yslice, :, 2] = imode & 0xff
    
print(f'Found mode: {mode_img[ny//2, nx//2]}')

输出:

Found mode: [255 255 254]

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python 从一组值中屏蔽图像像素

来自分类Dev

SQLite如何查找最常见的值

来自分类Dev

对大小相等的图像进行逐像素比较,以找到每个像素最常见的颜色

来自分类Dev

如何查找列中最常见的值是否出现X%次以上?

来自分类Dev

检测单色图像中最右边的黑色像素的x值?

来自分类Dev

PHP:数组中最常见的值

来自分类Dev

获取mysql中最常见的值

来自分类Dev

子列表中最常见的值

来自分类Dev

Python 列表中最常见的值

来自分类Dev

如何访问RGB图像的每个像素值?

来自分类Dev

使用Linq查找一组常见对象

来自分类Dev

查找最常见的哈希值

来自分类Dev

Python:查找图像中黑色像素的数量

来自分类Dev

通过一个循环查找JS数组中最常见的项目

来自分类Dev

Django ORM注释:最常见的一组用户queryset

来自分类Dev

查找字符串中最常见的单词

来自分类Dev

用group by查找数组中最常见的元素

来自分类Dev

查找集合中最常见的数字组合

来自分类Dev

在Python 3中查找网站中最常见的单词

来自分类Dev

在Python 3中查找网站中最常见的单词

来自分类Dev

查找 Pandas 数据框中最常见的事件

来自分类Dev

使用OpenCV获取图像中最常见的颜色

来自分类Dev

Numpy在另一列中找到每个值中最常见的项目

来自分类Dev

Numpy在另一列中找到每个值中最常见的项目

来自分类Dev

创建JavaScript数组中最常见值的索引数组

来自分类Dev

PostgreSQL获得数组中最常见的值

来自分类Dev

获取数组中最常见的值,或显示混合结果

来自分类Dev

如何设置像素的RGB值

来自分类Dev

查找RGB图像中的裁剪像素