1

2人が写っている画像があります。黒と白のピクセルのみを含むバイナリ イメージです。

まず、すべてのピクセルをループして、画像内の白いピクセルを見つけたいと思います。

私がやりたいことよりも、ある特定の白いピクセルの[x、y]を見つけたいということです。

その後、画像内の白いピクセル用の特定の[x、y]を画像内で使用したいと考えています。

[x、y] の座標を使用して、隣接する黒いピクセルを白いピクセルに変換したいと考えています。全体像ではありません。

ここに画像を投稿したかったのですが、残念ながら投稿できません。私の質問が理解できることを願っています。下の画像では、エッジを見ることができます。

たとえば、鼻の端を言うと、[x、y]を使用したループで、隣接するすべての黒いピクセルを白いピクセルに変えます。

これはバイナリ イメージです。

4

1 に答える 1

3

説明されている操作は、数学的形態学から膨張と呼ばれます。たとえば、scipy.ndimage.binary_dilation独自のものを使用するか、実装することができます。

これを行う 2 つの形式を次に示します (1 つは簡単な実装です)。結果の画像が同一であることを確認できます。

import sys
import numpy
from PIL import Image
from scipy import ndimage

img = Image.open(sys.argv[1]).convert('L') # Input is supposed to the binary.
width, height = img.size
img = img.point(lambda x: 255 if x > 40 else 0) # "Ignore" the JPEG artifacts.

# Dilation
im = numpy.array(img)
im = ndimage.binary_dilation(im, structure=((0, 1, 0), (1, 1, 1), (0, 1, 0)))
im = im.view(numpy.uint8) * 255
Image.fromarray(im).save(sys.argv[2])

# "Other operation"
im = numpy.array(img)
white_pixels = numpy.dstack(numpy.nonzero(im != 0))[0]
for y, x in white_pixels:
    for dy, dx in ((-1,0),(0,-1),(0,1),(1,0)):
        py, px = dy + y, dx + x
        if py >= 0 and px >= 0 and py < height and px < width:
            im[py, px] = 255
Image.fromarray(im).save(sys.argv[3])
于 2013-02-22T17:20:40.933 に答える