2016-04-04 6 views
0

Şeklin (1,19) gelen giriş dizisi yayın yapamadı. Bu kodu tanımlamak zor ama temelde bir resmim var (ad ve özelliklerle ikilikli) ve küçük bir kutu penceresi oluşturdum (1x20), bu pencereyle her piksele girmeye çalışıyorum ve siyah piksel sayısını sayıyorum. pencerede. Ancak her sütunun sonunda (0'dan h'ye gittiğimde) siyah piksellerin yerel minimini bulmak istiyorum ve sonra bu noktalarda pencere = 0 (beyaz) olacak (bu biraz alakasız) gerçi). Sadece numpy diziler dilimleme bu hatayı yapmaya devam edinValueError: ben basit numpy dizi dilimleme yapmaya çalışıyorum bu hatayı almaya devam şekil (1,20)

, her zaman dizisi bir sütun çok kısa ve ben nedenini bilmiyorum diyor. Her neyse, benim kodum ...

import scipy 
import numpy as np 
import cv2 
from scipy.signal import argrelextrema 

#%% Import grain image 

imagein = cv2.imread('141110_0.35_armt_amb2_0_load_pag_0000.tif',0) 
#resized = cv2.resize(imagein,None,fx=0.2,fy=0.2,interpolation =cv2.INTER_AREA) 
crop = imagein[1125:1200,1100:1185] 
HC = cv2.equalizeHist(crop) 
ret, thresh = cv2.threshold(HC,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU) 
thresh = 255- thresh 
cv2.imshow('Image',thresh) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

#%% Cropped thresholded Image --> Start segmentation 

binarised = cv2.erode(thresh,None,iterations = 1) 
binarised = cv2.dilate(binarised,None,iterations = 1) # Opening of particles 

h,w = binarised.shape 

#%% Start separation loop 

windowH = np.zeros(shape=(1,20)) 
NumNonZero = np.zeros(shape=(h,w)) 

#windowV = np.zeros(shape=(20,1)) 


for j in np.arange(0,w,1): 
    for i in np.arange(0,h,1): 
     windowH[:,:] = binarised[i:i+1,j:j+20] #####ERRROR HERE 
     NumNonZero[i,j] = cv2.countNonZero(windowH) 

x = argrelextrema(NumNonZero[i,0:h], np.less) #gives position of min vlaues in array 
y = NumNonZero[argrelextrema(NumNonZero[i,0:h], np.less)[0]] #gives min values' 

Hatanın nerede olduğunu vurguladım (döngüler için çift). Herhangi bir yardım teşekkür takdir !! windowH

Yani berrak 1x20 ve ben de 1x20 girmeye çalışıyorum işte binarised 'bir yığın ama buna 1x 19 olduğunu söylüyor! ???! ¬?

ValueError: Şimdi Repost

########## hata okur bu sefer, ben yarattık bu fonksiyonu ile çok benzer bir hata var gelen giriş dizisi yayın olamazdı şekle şekli (2,3,3) İşte

(3,3,3)

Ben pencere denemek ve değerlerle kendini doldurmak etmeyecek şekilde bakmak yinelemeleri azaltarak denedim ... benim kod olduğunu görüntü dışındadır ama hala işe yaramaz. Baska öneri? Teşekkür ederim.

#%% Import Libraries 
import numpy as np 
import cv2 

#%% 3D Median Filter Function 

def Median_Filter_3D(image,kernel): 

    window = np.zeros(shape=(kernel,kernel,kernel), dtype = np.uint8) 
    n = (kernel-1)/2 #Deals with Image border 
    imgout = np.empty_like(image) 
    w,h,l = image.shape 

#Start Loop over each pixel 

    for x in np.arange(0,(h-kernel-3),1): 
     for y in np.arange(0,(w-kernel-3),1): 
      for z in np.arange(0,(l-kernel-3),1): 
       window[:,:,:] = image[x:x+kernel,y:y+kernel,z:z+kernel] 
       med = np.median(window) 
       imgout[x+n,y+n,z+n] = med 
    return(imgout) 
+1

'j: Eğer dizinin sonunu gidiyor başlarsanız j + 20' 20 element değildir. – user2357112

cevap

0

j için for döngüsünüz 0 ile w-20 arasında olmalıdır. Aksi halde j + 20 resmin genişliğini geçecek ve sonuçta kırpılacak.

+0

Teşekkür ederim ... (Y) –