концентрические кольца малина пи - PullRequest
0 голосов
/ 28 июня 2018

Я хочу создать простой код, который позволит мне анализировать изображение, полученное с помощью камеры Raspberry Pi.

Я хочу использовать python или raspbarian, чтобы разбить изображение на концентрические кольца / кольцевые кольца, а затем проанализировать количество черных пикселей в каждом кольце.

Любой совет был бы великолепен!

1 Ответ

0 голосов
/ 28 июня 2018

Я не знаю много о Rapberry Pi, но я предполагаю, что вы можете получить доступ к изображениям с его камеры в виде обычного файла изображений, и я предполагаю, что вы можете установить PIL.

Если это так, вы можете открыть изображение, выполнить итерацию по его пикселям и распределить каждый пиксель по полосам на основе его расстояния от центра.

from PIL import Image
from collections import Counter
import math

RING_RADIUS = 15

img = Image.open("image.png")

center_x = img.size[0] / 2
center_y = img.size[1] / 2

results = Counter()
pix = img.load()
for i in range(img.size[0]):
    for j in range(img.size[1]):
        d = math.hypot(center_x - i, center_y - j)
        band = int(d / RING_RADIUS)
        if pix[i,j] == (0,0,0):
            results[band] += 1

for k,v in sorted(results.items()):
    print(f"Number of black pixels in ring #{k}: {v}")

Давайте попробуем запустить это на этом образце:

enter image description here

Результат:

Number of black pixels in ring #0: 145
Number of black pixels in ring #1: 150
Number of black pixels in ring #2: 150
Number of black pixels in ring #3: 150
Number of black pixels in ring #4: 453
Number of black pixels in ring #5: 337
Number of black pixels in ring #6: 613
Number of black pixels in ring #7: 489
Number of black pixels in ring #8: 1711
Number of black pixels in ring #9: 1460
Number of black pixels in ring #10: 1223
Number of black pixels in ring #11: 1505
Number of black pixels in ring #12: 1199
Number of black pixels in ring #13: 1120
Number of black pixels in ring #14: 1104
Number of black pixels in ring #15: 608
Number of black pixels in ring #16: 278
Number of black pixels in ring #17: 168
Number of black pixels in ring #18: 153
Number of black pixels in ring #19: 249
Number of black pixels in ring #20: 77

Поскольку вы работаете с данными веб-камеры, вам, вероятно, потребуется изменить строку if pix[i,j] == (0,0,0):, поскольку идеально черные пиксели будут довольно редкими. Вместо этого вы можете проверить, что разница в цвете между вашим пикселем и чистым черным достаточно мала. Есть несколько способов вычислить это, но евклидово расстояние проще всего.

def color_diff(a, b):
    return math.sqrt(
        (a[0]-b[0])**2 + 
        (a[1]-b[1])**2 + 
        (a[2]-b[2])**2
    )

#later in the code...

if color_diff(pix[i,j], (0,0,0)) < some_tolerance_value_goes_here:
        results[band] += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...