Разделение двоичного изображения на «блоки» пиксельных данных - PullRequest
4 голосов
/ 19 апреля 2011

Я использую Python и PIL как часть моей работы по встраиванию данных в двоичные изображения, и мне нужно проанализировать группы пикселей, чтобы определить подходящие пиксели для манипуляции для встраивания данных.Изображение должно быть разделено на равные «блоки» пиксельных данных, готовых для анализа, но я изо всех сил пытаюсь найти подходящий способ сделать это.Я пробовал методы с использованием массивов Python и numPy, но безуспешно.Любые предложения будут ценны.

Спасибо

Ответы [ 2 ]

3 голосов
/ 20 апреля 2011

Вы можете использовать малоизвестные приемы шага, чтобы создать представление вашего изображения, состоящего из блоков.Это очень быстро и не требует дополнительной памяти (пример немного подробный):

import numpy as np

#img = np.array(Image.open(filename), dtype='uint8')

w, h = 5, 4 # width, height of image
bw, bh = 2, 3 # width, height of blocks

img = np.random.randint(2, size=(h, w)) # create a random binary image

# build a blocky view of the image data
sz = img.itemsize # size in bytes of the elements in img
shape = (h-bh+1, w-bw+1, bh, bw) # the shape of the new array: two indices for the blocks,
                                 # two indices for the content of each block
strides = (w*sz, sz, w*sz, sz) # information about how to map indices to image data
blocks = np.lib.stride_tricks.as_strided(img, shape=shape, strides=strides)

# now we can access the blocks
print img
[[1 1 0 0 0]
 [0 1 1 0 0]
 [0 0 1 0 1]
 [1 0 1 0 0]]

print blocks[0,0]
[[1 1]
 [0 1]
 [0 0]]

print blocks[1,2]
[[1 0]
 [1 0]
 [1 0]]
3 голосов
/ 19 апреля 2011

Вам нужно использовать numpy array, чтобы получить группу пикселей.Изображение - это просто двумерный массив, поэтому вы можете использовать arr = numpy.array(Image.open(filename)), а после этого его можно нарезать.

#this code block from my fractal dimension finder
step = 2**a
for j in range(2**l):
    for i in range(2**l):
        block = arr[j * step:(j + 1) * step, i * step:(i + 1) * step]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...