Как я могу исправить «индекс кортежа вне диапазона» при выполнении сегментации изображения? - PullRequest
0 голосов
/ 09 января 2019

Я изучаю этот урок http://scikit -image.org / docs / dev / auto_examples / segmentation / plot_label.html # sphx-glr-auto-examples-segmentation-plot-label-py

Начало кода в учебнике:

%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

from skimage import data
from skimage.filters import threshold_otsu
from skimage.segmentation import clear_border
from skimage.measure import label, regionprops
from skimage.morphology import closing, square
from skimage.color import label2rgb

image = data.coins()[50:-50, 50:-50]
#  apply threshold
thresh = threshold_otsu(image)
bw = closing(image > thresh, square(3))

и я хочу применить его к моему изображению .jpg . Но это не работает, и я получаю на IPython длинное сообщение в конце:

IndexError: индекс кортежа вне диапазона

Я сравнил

print(data.coins()[50:-50, 50:-50].shape)

(203 л, 284 л)

и

import mahotas as mh
image=mh.imread('image.jpg')
print(image.shape)

(520 л, 704 л, 3 л)

Правильно ли я считаю, что разница происходит от разницы в измерении? И что я могу сделать, чтобы это исправить?

Кроме того, даже сейчас я читаю http://scikit -image.org / docs / dev / api / skimage.morphology.html # skimage.morphology.binary_closing мне не ясно, что квадрат (3) означает при закрытие . Не могли бы вы объяснить мне, что плз?

1 Ответ

0 голосов
/ 09 января 2019

Попробуйте преобразовать в оттенки серого после загрузки:

from skimage.color import rgb2gray

image = rgb2gray(data.coins()[50:-50, 50:-50]) 

Следующее:

square(3) 

означает квадратную матрицу 3x3, равную 1 с:

array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]], dtype=uint8)
...