Example #1
0
def get_raw_jpg_slices(patient_number=_slice_num, folder='./data/', label=False, bound=False):
    from src.util import read_jpg
    ret = np.empty((patient_number, _width, _height), dtype =np.int16)
    for i in range(patient_number):
        path = folder + 'p' + str(i) + '/label/'
        fn = find_filename(path, label, bound)
        arr = read_jpg(fn)
        ret[i] = np.array(arr.convert('L'), dtype=np.int16)
        if label is True or bound is True:
            idx = ret[i] > 0
            ret[i, idx] = 1
    return ret
Example #2
0
def get_local_feature_one_vertebra(v, I, label, block_size=block_size):
    # step 1: filter the image. 
    # step 2: extract 1st - 4th order of the filtered image.
    # here we use, 6 different scaled gaussian + linear transformation
    # (DCT, DST, fft)
    slice_num = I.shape[0]
    width = I.shape[2]
    height = I.shape[1]
    
    
    feature_dim = get_feature_dim()
    feature = np.empty((slice_num,  height, width, feature_dim), dtype=np.float)
    
    # first guassian filtered
    prev_filtered_dim = 0
    for s in sigmas:
        print "sigma value: " + str(s)
        filtered_dim = get_filtered_dim(s)
        for i in range(I.shape[0]):
            print "for slice " + str(i)
            img = I[i]
            f = get_local_feature_one_vertebra_one_slice_one_sigma(img, s)
            feature[i, :, :, prev_filtered_dim*moment: (prev_filtered_dim + filtered_dim)*moment]=f
        prev_filtered_dim = filtered_dim
            
    # step 3: now that we have feature of all the points in image scale,
    # we can extract the feature for all the sample points. 
    # Based on the paper, IEEE T. on Medical Imaging, 2002, "ASM Segmentation with optimal feature"
    # we need to use 5*5 window centered at each landmark.
    # note: feature = np.empty((slice_num,  height, width, feature_dim),dtype=np.float)
            
    print "start " + str( block_size)+ "x" + str(block_size) + " sampling..."
    block_area = block_size*block_size
    feature_block = np.empty((8, slice_num*block_area, feature_dim), dtype=np.float)
    label_block = np.empty((8, slice_num*block_area), dtype=np.int)
    
    size_1 = block_size/2
    size_2 = block_size - size_1
    
    for i in range(8): 
        idx_x = i*2 
        idx_y = i*2 + 1
        # slice_num * 2k+1 * feature_dim
        for n in range(slice_num):
            # here block is  block centered at landmark
            min_x = v[n, idx_x] - size_1
            max_x = v[n, idx_x] + size_2
            min_y = v[n, idx_y] - size_1
            max_y = v[n, idx_y] + size_2
            
            #########################################################
            #DEBUG
            if n == 0:
                from src.util import show_slice
                from src.util import read_jpg, crop_slice
                pn = 1
                fn = '4'
                fn =  '/Users/ruhansa/Dropbox/spine/data/p' + str(pn) + '/label/'+ fn + '.jpg'
                label_jpg = read_jpg(fn)
                label_arr = np.array(label_jpg.convert('L'), dtype=np.int16)
                x_min = 0
                x_max = 512
                y_min = 130
                y_max = 350
                clabel = crop_slice(label_arr, (x_min, y_min), (x_max, y_max)) * 255
                clabel[min_x: max_x, min_y: max_y] = 255
                show_slice(clabel)
            #########################################################
                
            
            feature_block[i, n*block_area:n*block_area+block_area, :] = feature[n, min_x:max_x, min_y: max_y, : ].reshape(block_area, feature_dim)
            label_block[i, n*block_area: n*block_area+block_area] = label[n, min_x:max_x, min_y:max_y].reshape(block_area)
            
    
    return label_block, feature_block
Example #3
0
# collecting data
folder = "/Users/ruhansa/Dropbox/spine/data/"
import numpy as np

slice_num = 2
height = 512
width = 512

arr = np.zeros((slice_num, height, width), dtype=np.int16)
for i in range(0, slice_num):
    dirname = folder + "p" + str(i) + "/label/"
    for file in os.listdir(dirname):
        if fnmatch.fnmatch(file, "*_bound.jpg"):
            slice_number = file.split("_")[0]
    filename = dirname + slice_number + ".jpg"
    from src.util import read_jpg

    r, g, b = read_jpg(filename).split()
    arr[i] = r

from src.util import seperate_data
import json

f = open("/Users/ruhansa/Dropbox/spine/data/label.json", "r")
diagnose = json.load(f)
herniated, normal = seperate_data(diagnose, arr, vertebra_number=0, range_start=0, range_end=slice_num)
landmarks = show_volume(
    herniated, herniated.shape[0], folder_name=folder + "label/", slice_per_subject=herniated.shape[0]
)
Example #4
0
    from src.util import show_volume_dots

    dots = np.zeros((10, 2, 8), dtype=np.int16)
    for i in range(10):
        xs = shapes[i, np.arange(0, 15, 2)].astype(int)
        ys = shapes[i, np.arange(1, 16, 2)].astype(int)
        dots[i] = np.array((xs, ys))
    show_volume_dots(background, dots)


if __name__ == "__main__":

    from src.util import read_jpg, crop_slice

    pn = 1
    fn = "4"
    fn = "/Users/ruhansa/Dropbox/spine/data/p" + str(pn) + "/label/" + fn + ".jpg"
    label_jpg = read_jpg(fn)
    label = np.array(label_jpg.convert("L"), dtype=np.int16)
    x_min = 0
    x_max = 512
    y_min = 130
    y_max = 350
    clabel = crop_slice(label, (x_min, y_min), (x_max, y_max))

    # slice(model.mean, clabel)
    volume(shapes, clabel)
    # from src.asm_util import show_one_vertebra
    # show_one_vertebra(shapes, slice_number=shapes.shape[0],width=220, height=512)
"""
Created on Thu Dec 10 10:48:08 2015

@author: ruhansa

To test GVF and do preprocessing


Result: 
"""

import numpy as np

fn = '/Users/ruhansa/Desktop/ex.jpg'
from src.util import read_jpg
img = read_jpg(fn)
data = np.array(img.convert('L'), dtype=np.int16)
#import numpy as np
#mask = np.zeros((patient_number, 512, 512), dtype = np.int16)
#idx = data > 240 # find dural sac
#mask[idx] = 255


#subtracting the low pass from original
from scipy import ndimage
npix = 3
gauss = ndimage.gaussian_filter(data, sigma=npix)

high_pass = data - gauss

idx = high_pass < 0
Example #6
0
# coding: utf-8

# # This is to test GVF in ASM for spine dicom

# In[ ]:

import os
os.chdir('/Users/ruhansa/Dropbox/spine/')
import numpy as np
import pickle
from src.util import read_jpg
fn = '/Users/ruhansa/Desktop/ex.jpg'
arr = read_jpg(fn)
from oct2py import octave
octave.addpath('/Users/ruhansa/Desktop/gvf_dist_v4.2c/examples/')
octave.gvf_spine(arr)


# In[ ]: