2014-01-24 75 views
1

我有一個DICOM圖像,上面有遮罩。它看起來像一個黑色的背景,中間有一個白色的圓圈(未覆蓋區域並將面具置零)。遮罩圖像中像素值的標準偏差

的代碼是:

import numpy as np 
import dicom 
import pylab 

ds = dicom.read_file("C:\Users\uccadmin\Desktop\James_Phantom_CT_Dec_16th\James Phantom CT Dec 16th\Images\SEQ4Recon_3_34\IM-0268-0001.dcm") 

lx, ly = ds.pixel_array.shape 
X, Y = np.ogrid[0:lx, 0:ly] 
mask = (X - lx/2)**2 + (Y - ly/2)**2 > lx*ly/8 # defining mask 
ds.pixel_array[mask] = 0 
print np.std(ds.pixel_array) # trying to get standard deviation 

pylab.imshow(ds.pixel_array, cmap=pylab.cm.bone) # shows image with mask 

我想要得到的像素值的標準偏差內的白圈僅即排除圓(掩模)外的黑色空間。

我不認爲我用上面的代碼獲得的價值是正確的,因爲它是~500,並且白色圓圈幾乎是同質的。

任何想法如何確保我得到白色圓圈內的像素值的標準偏差只能以Pythonic的方式?

回答

0

我認爲你得到一個大數字的原因是因爲你的標準差是包括所有的零值。

僅僅忽略所有零值就足夠了嗎? (這將是可以的,假設沒有或極少數像素在圓圈中的值爲0.)如果是這樣的話

np.std([x for x in ds.pixel_array if x > 0]) 

應該做的伎倆。如果這還不夠好,那麼你就可以扭轉的情況在你的面具是

mask = (X - lx/2)**2 + (Y - ly/2)**2 < lx*ly/8 # defining mask, < instead of > 

,做

mp.std(ds.pixel_array[mask]) 
+0

聯合工作組,我非常欣賞評論!我同意大值是因爲零。但是,如果圓內也有零,我希望它可以。我試過你是代碼的第一行沒有少,但我得到「語法錯誤」?當我使用你的第二行代碼時,我得到一個st。開發。值爲零,但這是因爲我沒有'扭轉這種情況',你介意說明你的意思嗎?再次感謝! – Foodaaaay

+0

@Foodaaaay,看我的編輯。 – jwg

+0

Python的第一行完全被破壞了,最近我一直在使用其他語言。 – jwg