2017-02-21 15 views
0

Я пытаюсь здесь получить границы сегментированного изображения, используя функцию find_boundaries в skimage. но при применении следующего кода все, что я получил, - это матрица с ложью или нулями. Вот мой код:Получить границы из сегментированного изображения

import numpy as np 
import matplotlib.pyplot as plt 
from skimage import io 
from skimage.morphology import watershed 
from skimage.segmentation import mark_boundaries, find_boundaries 
from skimage.filters import sobel 

myimage = io.imread('15746.png') 
plt.imshow(myimage, cmap=plt.cm.gray) 
plt.show() 

hist = np.histogram(myimage, bins= np.arange(0,256)) 
fig, (ax1, ax2) = plt.subplots(1,2,figsize=(8,3)) 
ax1.imshow(myimage, cmap=plt.cm.gray, interpolation='nearest') 
ax1.axis('off') 
ax2.plot(hist[1][:-1], hist[0], lw=2) 
ax2.set_title('histogram of grey values') 
plt.show() 

selected_pixles = [] 
for i in hist[1][:-1]: 
    if hist[0][i] >= 700: 
     selected_pixles.append(i) 

image = sobel(myimage) 
fig, ax = plt.subplots(figsize=(4, 3)) 
ax.imshow(image, cmap=plt.cm.gray, interpolation='nearest') 
ax.axis('off') 
ax.set_title('elevation_map') 

markers = np.zeros_like(myimage) 
markers[myimage < min(selected_pixles)] = 1 
markers[myimage > max(selected_pixles)] = 2 
fig, ax = plt.subplots(figsize=(4, 3)) 
ax.imshow(markers, cmap=plt.cm.gray, interpolation='nearest') 
ax.axis('off') 
ax.set_title('markers') 

seg = watershed(image, markers=markers) 
#print(np.shape(seg[1])) 
fig, ax = plt.subplots(figsize=(4, 3)) 
ax.imshow(seg, cmap=plt.cm.gray, interpolation='nearest') 
ax.axis('off') 
ax.set_title('segmentation') 
#plt.show() 



'''bound = mark_boundaries(seg,seg, mode='thick') 
#print(np.shape(bound[0])) 
plt.imshow(bound, cmap=plt.cm.gray) 
plt.show()''' 

bounder = find_boundaries(seg, mode='thick').astype(np.uint8) 
print(bounder) 

и вот результат:

[[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
..., 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0]] 

Вот изображение: enter image description here

Так что я здесь отсутствует?

+0

Пожалуйста, разместите соответствующее изображение. –

+0

я отредактировал мое сообщение и добавил изображение –

ответ

1

Ваш скрипт работает нормально, а вывод не только нулей. Когда я сюжет, я вижу:

boundary plot

При печати массива NumPy суммирует выход; и поскольку внешние значения равны 0, это то, что вы видите.

+0

могу ли я использовать выходной массив как дескриптор? ... и если я хочу создать дескриптор формы для такого изображения, как вы думаете, лучший способ для него? –

+0

Чтобы создать дескриптор, скелетизируйте границу, извлеките ее координаты, а затем используйте один из стандартных механизмов, например коэффициенты Фурье (http://fourier.eng.hmc.edu/e161/lectures/fd/node1.html) , –

Смежные вопросы