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()
_images/enhance.png

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()