代码之家  ›  专栏  ›  技术社区  ›  Toke Faurby

如何找到最频繁的像素值?

  •  2
  • Toke Faurby  · 技术社区  · 6 年前

    我有一组图像,其中每个像素由3个0-255范围内的整数组成。

    我感兴趣的是找到一个像素是“代表性”(尽可能多)为整个像素人口作为一个整体,像素必须出现在像素人口。 我正在确定哪个像素是最常见的 中值的 模式)在我的图像集最有意义。

    我正在使用 python ,但我不知道该怎么办。 numpy array 带尺寸 [n, h, w, c] ,在哪里 n 是图像的数量, h 是高度, w 宽度是多少 and c`是通道(RGB)。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Aayush Mahajan    6 年前

    我假设你需要找到最常见的元素,正如Cris Luengo提到的,叫做模式。我还要假设通道的位深度是8位(值在0和255之间,即模256)。

    以下是一种独立于实现的方法:

    其目的是保持所遇到的所有不同类型像素的计数。为此,使用字典是有意义的,它的形式是 {pixel_value : count} .

    一旦这个字典被填充,我们就可以找到计数最高的像素。

    现在,“像素”是不可散列的,因此不能直接存储在字典中。我们需要一种方法为每个唯一的像素分配一个整数(我称之为像素值),也就是说,您应该能够转换像素值<--&燃气轮机;像素的RGB值

    此函数用于将RGB值转换为0到16777215之间的整数:

    def get_pixel_value(pixel):
        return pixel.red + 256*pixel.green + 256*256*pixel.blue 
    

    def get_rgb_values(pixel_value):
        red = pixel_value%256
        pixel_value //= 256
        green = pixel_value%256
        pixel_value //= 256
        blue = pixel_value
        return [red,green,blue]
    

    此函数可以查找图像中最常见的像素:

    def find_most_common_pixel(image):
        histogram = {}  #Dictionary keeps count of different kinds of pixels in image
    
        for pixel in image:
            pixel_val = get_pixel_value(pixel)
            if pixel_val in histogram:
                histogram[pixel_val] += 1 #Increment count
            else:
                histogram[pixel_val] = 1 #pixel_val encountered for the first time
    
        mode_pixel_val = max(histogram, key = histogram.get) #Find pixel_val whose count is maximum
        return get_rgb_values(mode_pixel_val)  #Returna a list containing RGB Value of the median pixel
    

    如果您希望在一组图像中找到最频繁的像素,只需添加另一个循环即可 for image in image_set 并为所有图像中的所有像素值填充字典。