簡體   English   中英

區域隨着分水嶺變換誤差而增長

[英]Region growing with the watershed transform error

大家好,我是圖像處理的新手,我一直在嘗試來自 adfoucart 的代碼,但我一直收到此錯誤

https://github.com/adfoucart/image-processing-notebooks/blob/main/V31%20-%20Region%20growth%20with%20the%20watershed%20transform.ipynb

image.shape
(240, 320)

from skimage.filters import rank,gaussian
from skimage.morphology import disk
from skimage.feature import peak_local_max

def get_markers(image, indices=False):
    im_ = gaussian(image, sigma=4)
    gradr = rank.gradient(im_[:,:,0],disk(5)).astype('int')
    gradg = rank.gradient(im_[:,:,1],disk(5)).astype('int')
    gradb = rank.gradient(im_[:,:,2],disk(5)).astype('int')
    grad = gradr+gradg+gradb
    
    return peak_local_max(grad.max()-grad,threshold_rel=0.5, min_distance=60,indices=indices),grad

markers,grad = get_markers(image, True)
plt.figure()
plt.imshow(grad, cmap=plt.cm.gray)
plt.plot(markers[:,1],markers[:,0],'b+')
plt.show()

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
/var/folders/f9/5vh23mb50wj5wq4vfl8wcgx40000gn/T/ipykernel_34090/3084023926.py in <module>
     12     return peak_local_max(grad.max()-grad,threshold_rel=0.5, min_distance=60,indices=indices),grad
     13 
---> 14 markers,grad = get_markers(image, True)
     15 plt.figure()
     16 plt.imshow(grad, cmap=plt.cm.gray)

/var/folders/f9/5vh23mb50wj5wq4vfl8wcgx40000gn/T/ipykernel_34090/3084023926.py in get_markers(image, indices)
      5 def get_markers(image, indices=False):
      6     im_ = gaussian(image, sigma=4)
----> 7     gradr = rank.gradient(im_[:,:,0],disk(5)).astype('int')
      8     gradg = rank.gradient(im_[:,:,1],disk(5)).astype('int')
      9     gradb = rank.gradient(im_[:,:,2],disk(5)).astype('int')

IndexError: too many indices for array: array is 2-dimensional, but 3 were indexed

任何幫助將不勝感激,非常感謝!

您的圖像是灰度的,即單通道。 我可以這么說,因為它的形狀是 (240,320) 而不是 (240,320,3),如果是 3 通道 RGB。

這意味着您不需要跨 3 個通道進行平均,您應該只使用 2 個索引,即

grad = rank.gradient(im_[:,:],disk(5)).astype('int')

實際上,您可能只使用:

grad = rank.gradient(im_,disk(5)).astype('int')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM