def test_threshold_denoise(image): denoised_thresholded = pre.threshold(image, sigma=5, radius=15, smooth_method='tv') thresholded = pre.threshold(image, sigma=0, radius=15) assert (_total_variation(thresholded) > _total_variation(denoised_thresholded))
def test_threshold2d_sauvola(image): res = image.meta['Scan']['PixelHeight'] * 1e9 # nm/pixel radius = int(50 / res) # radius of 50nm in pixels sigma = 0.1 * radius thresholded0 = pre.threshold( image, sigma=sigma, radius=radius, method='sauvola', offset=0.2 ) assert thresholded0.dtype == bool assert thresholded0.shape == image.shape thresholded1 = pre.threshold( image, sigma=sigma, radius=radius, method='sauvola', offset=0.075 ) assert np.all(thresholded1 <= thresholded0)
def test_threshold_2d_median(image): sigma = 2 radius = 5 thresholded = pre.threshold( image[:100, :100], sigma=sigma, radius=radius, method='median' ) assert thresholded.shape == (100, 100) assert thresholded.dtype == bool
def test_threshold_2d_niblack(image): res = image.meta['Scan']['PixelHeight'] * 1e9 # nm/pixel radius = int(50 / res) sigma = 0.1 * radius thresholded0 = pre.threshold( image, sigma=sigma, radius=radius, method='niblack', offset=0.075 ) assert thresholded0.shape == image.shape
def test_threshold_no_method(image): with pytest.raises(ValueError): pre.threshold(image, radius=1, method='no method')
def test_threshold_2d_otsu(image): thresholded_otsu = pre.threshold(image) assert thresholded_otsu.shape == image.shape
def test_thresholded(test_image): thresholded = pre.threshold(test_image, sigma=2, radius=31, offset=0.075) return thresholded
# IPython log file import os os.chdir('/Users/jni/Dropbox/data1/malaria/adam-oli-schizont-30sec') import imageio as iio im = iio.imread('Shchizont4_UninfRBC10_02.tif', format='fei') scale = im.meta['Scan']['PixelHeight'] * 1e9 # convert m to nm sigma = 5/scale # nm / (nm/pixel) ==> pixel import matplotlib.pyplot as plt plt.imshow(im, cmap='gray') from skan import pre from skimage import morphology binary = pre.threshold(im, sigma=sigma, radius=round(10*sigma)) skeleton_image = morphology.skeletonize(binary) plt.imshow(skeleton_image) shape = feature.shape_index(im, sigma=5) plt.imshow(shape, cmap='RdBu') shape_skeleton = skeleton_image * shape from skan import summarise data = summarise(shape_skeleton) data.head() from skan import draw draw.overlay_skeleton_2d(im, shape_skeleton, dilate=1)