|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
|
|
Created on Thu Mar 1 11:30:31 2018
|
|
|
|
|
|
|
|
@author: z5030440
|
|
|
|
|
|
|
|
Contains all the utilities, convenience functions and small functions that do simple things
|
|
|
|
"""
|
|
|
|
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
import numpy as np
|
|
|
|
import datetime
|
|
|
|
import pdb
|
|
|
|
|
|
|
|
|
|
|
|
def ecdf(x):
|
|
|
|
"""convenience function for computing the empirical CDF"""
|
|
|
|
vals, counts = np.unique(x, return_counts=True)
|
|
|
|
ecdf = np.cumsum(counts).astype(np.float64)
|
|
|
|
ecdf /= ecdf[-1]
|
|
|
|
return vals, ecdf
|
|
|
|
|
|
|
|
def intensity_histogram(image):
|
|
|
|
"""plots histogram and cumulative distribution of the pixel intensities in an image"""
|
|
|
|
imSize = image.shape
|
|
|
|
if len(imSize) == 2:
|
|
|
|
im = image[:,:].reshape(imSize[0] * imSize[1])
|
|
|
|
im = im[~np.isnan(im)]
|
|
|
|
fig, (ax1, ax2) = plt.subplots(2,1, sharex=True, figsize = (8,6))
|
|
|
|
ax1.hist(im, bins=300)
|
|
|
|
ax1.set_title('Probability density function')
|
|
|
|
ax2.hist(im, bins=300, cumulative=True, histtype='step')
|
|
|
|
ax2.set_title('Cumulative distribution')
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
else:
|
|
|
|
for i in range(imSize[2]):
|
|
|
|
im = image[:,:,i].reshape(imSize[0] * imSize[1])
|
|
|
|
im = im[~np.isnan(im)]
|
|
|
|
fig, (ax1, ax2) = plt.subplots(2,1, sharex=True, figsize = (8,6))
|
|
|
|
ax1.hist(im, bins=300)
|
|
|
|
ax1.set_title('Probability density function')
|
|
|
|
ax2.hist(im, bins=300, cumulative=True, histtype='step')
|
|
|
|
ax2.set_title('Cumulative distribution')
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
def compare_images(im1, im2):
|
|
|
|
"""plots 2 images next to each other, sharing the axis"""
|
|
|
|
plt.figure()
|
|
|
|
ax1 = plt.subplot(121)
|
|
|
|
plt.imshow(im1, cmap='gray')
|
|
|
|
ax2 = plt.subplot(122, sharex=ax1, sharey=ax1)
|
|
|
|
plt.imshow(im2, cmap='gray')
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
def find_indices(lst, condition):
|
|
|
|
"imitation of MATLAB find function"
|
|
|
|
return [i for i, elem in enumerate(lst) if condition(elem)]
|