1

scikit-image を使用して青色の輪郭を取得しようとしています。scikit-imageでも利用できるopencvの機能があると確信しています。

うまく機能するfind_contoursメソッドを認識していますが、輪郭のすべての色を取得します。青い輪郭を取得したいだけです。

http://scikit-image.org/docs/dev/api/skimage.measure.find_contours.html

これを行う方法のアイデアはありますか? 私の推測では、青以外のすべての色を削除するために、何らかの方法で画像を前処理することです。

4

1 に答える 1

3

最初に他のすべての色を抑制するというあなたの提案は良いものです。これを行うためのコードを次に示します。

from skimage import io, color, exposure, img_as_float
import matplotlib.pyplot as plt

# http://www.publicdomainpictures.net/view-image.php?image=26890&picture=color-wheel
image = img_as_float(io.imread('color-wheel.jpg'))

blue_lab = color.rgb2lab([[[0, 0, 1.]]])
light_blue_lab = color.rgb2lab([[[0, 1, 1.]]])
red_lab = color.rgb2lab([[[1, 0, 0.]]])
image_lab = color.rgb2lab(image)

distance_blue = color.deltaE_cmc(blue_lab, image_lab, kL=0.5, kC=0.5)
distance_light_blue = color.deltaE_cmc(light_blue_lab, image_lab, kL=0.5, kC=0.5)
distance_red = color.deltaE_cmc(red_lab, image_lab, kL=0.5, kC=0.5)
distance = distance_blue + distance_light_blue - distance_red
distance = exposure.rescale_intensity(distance)

image_blue = image.copy()
image_blue[distance > 0.3] = 0

f, (ax0, ax1, ax2) = plt.subplots(1, 3, figsize=(20, 10))
ax0.imshow(image)
ax1.imshow(distance, cmap='gray')
ax2.imshow(image_blue)
plt.show()

色の選択

于 2014-02-09T16:05:41.633 に答える