Examples¶
Vessel Enhancement¶
import sys
import dictlearn as dl
import matplotlib.pyplot as plt
image = dl.imread('images/vessel.png')
patches = dl.Patches(image, size=4)
labels = dl.detection.smallest_cluster(patches.patches.T, 2, True)
# Adjust alpha to change the weight for the enhanced image
if len(sys.argv) == 2:
alpha = float(sys.argv[1])
else:
alpha = 0.2
vessels = patches.patches * labels
new = alpha*patches.patches + (1 - alpha)*vessels
enhanced = patches.reconstruct(new)
plt.subplot(121)
plt.imshow(image)
plt.axis('off')
plt.title('Original Image')
plt.subplot(122)
plt.imshow(enhanced)
plt.axis('off')
plt.title('Enhanced')
plt.show()

Denoise¶
import os
import matplotlib.pyplot as plt
import dictlearn as dl
base_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
plt.rcParams['image.cmap'] = 'bone'
image1 = os.path.join(base_dir, 'images/lena_noisy512.png')
image2 = os.path.join(base_dir, 'images/lena512.png')
noisy_image = dl.imread(image1).astype(float)
clean_image = dl.imread(image2).astype(float)
denoise = dl.Denoise(noisy_image, patch_size=11, method='online')
# method='batch' for ksvd
denoise.train(iters=1000, n_nonzero=10, n_atoms=256, n_threads=2, verbose=True)
denoised_odl = denoise.denoise(sigma=33, n_threads=2)
denosied_ksvd = dl.ksvd_denoise(noisy_image, patch_size=11, n_atoms=256, sigma=33,
verbose=True, n_threads=4)
plt.subplot(221)
plt.imshow(clean_image)
plt.title('Original')
plt.axis('off')
plt.subplot(222)
plt.imshow(noisy_image)
plt.title('Noisy, psnr = {:2f}'.format(dl.utils.psnr(clean_image, noisy_image, 255)))
plt.axis('off')
plt.subplot(223)
plt.imshow(denoised_odl)
plt.title('ODL, psnr = {:.2f}'.format(dl.utils.psnr(clean_image, denoised_odl, 255)))
plt.axis('off')
plt.subplot(224)
plt.imshow(denosied_ksvd)
plt.title('K-SVD, psnr = {:.2f}'.format(dl.utils.psnr(clean_image, denosied_ksvd, 255)))
plt.axis('off')
plt.show()
Inpaint¶
import os
import numpy as np
import matplotlib.pyplot as plt
import dictlearn as dl
base_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
plt.rcParams['image.cmap'] = 'bone'
house = os.path.join(base_dir, 'images/test/house.png')
lena = os.path.join(base_dir, 'images/test/lena.png')
text_mask = os.path.join(base_dir, 'images/test/TextMask256.png')
house = dl.imread(house).astype(float)
lena = dl.imread(lena).astype(float)
text_mask = dl.imread(text_mask).astype(bool)
keep = 0.3 # Keep 30% of the original data
random_mask = np.random.rand(*lena.shape) < keep
# We now have two images, and two masks - we'll apply both masks to
# both images and see how the structure of the image affect the result
plt.subplot(221)
plt.imshow(house)
plt.axis('off')
plt.subplot(222)
plt.imshow(lena)
plt.axis('off')
plt.subplot(223)
plt.imshow(text_mask)
plt.axis('off')
plt.subplot(224)
plt.imshow(random_mask)
plt.axis('off')
plt.figure()
# Corrupt the images
house_text = house*text_mask
house_rnd = house*random_mask
lena_text = lena*text_mask
lena_rnd = lena*random_mask
plt.suptitle('Corrupted images')
plt.subplot(221)
plt.imshow(house_text)
plt.axis('off')
plt.subplot(222)
plt.imshow(lena_text)
plt.axis('off')
plt.subplot(223)
plt.imshow(house_rnd)
plt.axis('off')
plt.subplot(224)
plt.imshow(lena_rnd)
plt.axis('off')
plt.figure()
iters = 10
def create_callback(original_image):
def print_iter(image_estimate, iteration):
psnr = dl.utils.psnr(original_image, image_estimate, 255)
print('Iter %d, PSNR = %.2f' % (iteration + 1, psnr))
return print_iter
inpaint = dl.Inpaint(house_text, text_mask)
house_text_inpainted = inpaint.inpaint(callback=create_callback(house))
inpaint = dl.Inpaint(lena_text, text_mask)
lena_text_inpainted = inpaint.inpaint(callback=create_callback(lena))
inpaint = dl.Inpaint(house_rnd, random_mask)
house_rnd_inpainted = inpaint.inpaint(callback=create_callback(house))
inpaint = dl.Inpaint(lena_rnd, random_mask)
lena_rnd_inpainted = inpaint.inpaint(callback=create_callback(lena))
plt.suptitle('Each of these are the cleaned version of img in same spot as prev plot')
plt.subplot(221)
plt.imshow(house_text_inpainted)
plt.title('PSNR = {:.3f}'.format(dl.utils.psnr(house, house_text_inpainted, 255)))
plt.axis('off')
plt.subplot(222)
plt.imshow(lena_text_inpainted)
plt.title('PSNR = {:.3f}'.format(dl.utils.psnr(lena, lena_text_inpainted, 255)))
plt.axis('off')
plt.subplot(223)
plt.imshow(house_rnd_inpainted)
plt.title('PSNR = {:.3f}'.format(dl.utils.psnr(house, house_rnd_inpainted, 255)))
plt.axis('off')
plt.subplot(224)
plt.imshow(lena_rnd_inpainted)
plt.title('PSNR = {:.3f}'.format(dl.utils.psnr(lena, lena_rnd_inpainted, 255)))
plt.axis('off')
plt.show()