2014-01-24 4 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 

나는 ONLY 즉 흰색 원 내부의 픽셀 값의 표준 편차를 얻을 원 (마스크) 외부의 검은 공간을 제외 할.

저는 위의 코드로 얻는 가치가 ~ 500이라고 생각하지 않습니다. 흰색 원은 거의 동질입니다.

아이디어를 얻으려면 Pythonic 방식으로 만 흰색 원 안에있는 픽셀 값의 표준 편차를 얻는 방법을 알고 싶습니까?

답변

0

큰 숫자를 얻는 이유는 표준 편차가 모든 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

JWG을 할 마스크의 상태를 되돌릴 수, 정말 의견을 주셔서 감사합니다! 나는 큰 가치가 0이기 때문에 동의합니다. 그러나 원 안에 0이있는 경우에도 확인하고 싶습니다. 나는 당신이 코드의 첫 번째 라인은 아니지만 덜했지만 "구문 오류"가 나타났습니다? 두 번째 코드 줄을 사용할 때 나는 st. dev. 값이 0인데, 이것은 '조건을 뒤집어 놓지 않았기 때문입니다.'이 의미가 무엇인지 설명해 주시겠습니까? 다시 한 번 감사드립니다! – Foodaaaay

+0

@ Foodaaaay, 내 편집을 참조하십시오. – jwg

+0

파이썬의 첫 번째 라인은 완전히 망가졌으며, 최근 다른 언어로 작업 해 왔습니다. – jwg