Usuń 'svd_operations.py'
This commit is contained in:
parent
e450335467
commit
a4de07ea79
@ -1,94 +0,0 @@
|
|||||||
import numpy as np
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
from skimage import data
|
|
||||||
from skimage.color import rgb2gray
|
|
||||||
from skimage import img_as_ubyte, img_as_float
|
|
||||||
from ipywidgets import interact, interactive, interact_manual
|
|
||||||
from numpy.linalg import svd
|
|
||||||
import ipywidgets as widgets
|
|
||||||
|
|
||||||
gray_images = {
|
|
||||||
"cat": rgb2gray(img_as_float(data.chelsea())),
|
|
||||||
"astro": rgb2gray(img_as_float(data.astronaut())),
|
|
||||||
"camera": data.camera(),
|
|
||||||
"coin": data.coins(),
|
|
||||||
"clock": data.clock(),
|
|
||||||
"blobs": data.binary_blobs(),
|
|
||||||
"coffee": rgb2gray(img_as_float(data.coffee()))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def mc_pi(ntrials):
|
|
||||||
"""
|
|
||||||
calculate the value of pi using montecarlo method and visualize the process
|
|
||||||
|
|
||||||
"""
|
|
||||||
x = np.random.random(ntrials)
|
|
||||||
y = np.random.random(ntrials)
|
|
||||||
# masking
|
|
||||||
inside_circle = x ** 2 + y ** 2 < 1
|
|
||||||
unit_circle_x = np.linspace(0, 1, 100)
|
|
||||||
unit_circle = [unit_circle_x, np.sqrt(1.0 - unit_circle_x ** 2)]
|
|
||||||
plt.plot(*unit_circle, color='black')
|
|
||||||
plt.scatter(x[inside_circle], y[inside_circle], marker='.', color='blue', s=1)
|
|
||||||
plt.scatter(x[~inside_circle], y[~inside_circle], marker='.', color='red', s=1)
|
|
||||||
plt.title("value of $\pi$=" + str(4.0 * np.sum(inside_circle) / float(ntrials)))
|
|
||||||
|
|
||||||
|
|
||||||
def compress_svd(image, k):
|
|
||||||
"""
|
|
||||||
Perform svd decomposition and truncated (using k singular values/vectors) reconstruction
|
|
||||||
returns
|
|
||||||
--------
|
|
||||||
reconstructed matrix reconst_matrix, array of singular values s
|
|
||||||
"""
|
|
||||||
U, s, V = svd(image, full_matrices=False)
|
|
||||||
reconst_matrix = np.dot(U[:, :k], np.dot(np.diag(s[:k]), V[:k, :]))
|
|
||||||
|
|
||||||
return reconst_matrix, s
|
|
||||||
|
|
||||||
|
|
||||||
def compress_show_gray_images(img_name, k):
|
|
||||||
"""
|
|
||||||
compresses gray scale images and display the reconstructed image.
|
|
||||||
Also displays a plot of singular values
|
|
||||||
"""
|
|
||||||
image = gray_images[img_name]
|
|
||||||
original_shape = image.shape
|
|
||||||
reconst_img, s = compress_svd(image, k)
|
|
||||||
fig, axes = plt.subplots(1, 2, figsize=(8, 5))
|
|
||||||
axes[0].plot(s)
|
|
||||||
compression_ratio = 100.0 * (k * (original_shape[0] + original_shape[1]) + k) / (
|
|
||||||
original_shape[0] * original_shape[1])
|
|
||||||
axes[1].set_title("compression ratio={:.2f}".format(compression_ratio) + "%")
|
|
||||||
axes[1].imshow(reconst_img, cmap='gray')
|
|
||||||
axes[1].axis('off')
|
|
||||||
fig.tight_layout()
|
|
||||||
|
|
||||||
|
|
||||||
def compute_k_max(img_name):
|
|
||||||
"""
|
|
||||||
utility function for calculating max value of the slider range
|
|
||||||
"""
|
|
||||||
img = gray_images[img_name]
|
|
||||||
m, n = img.shape
|
|
||||||
return m * n / (m + n + 1)
|
|
||||||
|
|
||||||
|
|
||||||
# set up the widgets
|
|
||||||
list_widget = widgets.Dropdown(options=list(gray_images.keys()))
|
|
||||||
int_slider_widget = widgets.IntSlider(min=1, max=compute_k_max('cat'))
|
|
||||||
|
|
||||||
|
|
||||||
def update_k_max(*args):
|
|
||||||
img_name = list_widget.value
|
|
||||||
int_slider_widget.max = compute_k_max(img_name)
|
|
||||||
|
|
||||||
|
|
||||||
list_widget.observe(update_k_max, 'value')
|
|
||||||
|
|
||||||
interact(compress_show_gray_images, img_name=list_widget, k=int_slider_widget)
|
|
||||||
|
|
||||||
mc_widget = interactive(mc_pi, ntrials=(1, 100000, 10))
|
|
||||||
mc_widget
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user