Slajdy są tutaj ONA6-kompresja
Zadania na dziś:
1. Zapoznaj się z modułem gzip zapisz plik tekstowy ze swoim ulubionym wierszem lub sekwncję ulubionego genu ludzkiego w pliku skompresowanym ze skryptu pythona, zdekompresuj go przy pomocy programu gunzip i odwrotnie
2. Weźmy takie pomocnicze funkcje w pythonie opisujące dyskretną transformatę kosinusową:
import urllib,io from urllib import request from PIL import Image from scipy import fftpack import numpy as np URL='http://regulomics.mimuw.edu.pl/wp/wp-content/uploads/2019/04/palmy.png' def get_image_from_url(image_url=URL, size=(256, 256)): file_descriptor = request.urlopen(image_url) image_file = io.BytesIO(file_descriptor.read()) image = Image.open(image_file) img_color = image.resize(size, 1) img_grey = img_color.convert('L') img = np.array(img_grey, dtype=np.float) return img def get_2D_dct(img): """ Get 2D Cosine Transform of Image """ return fftpack.dct(fftpack.dct(img.T, norm='ortho').T, norm='ortho') def get_2d_idct(coefficients): """ Get 2D Inverse Cosine Transform of Image """ return fftpack.idct(fftpack.idct(coefficients.T, norm='ortho').T, norm='ortho') def get_reconstructed_image(raw): img = raw.clip(0, 255) img = img.astype('uint8') img = Image.fromarray(img) return img
wykonaj program, który dokonuje Ntego przybliżenia obrazu, przy pomocy zerowania wartośći powyżej Ntego wiersza i Ntej kolumny macierzy get_2D_dct(img) i wyświetl kilkanaście pierwszych przybliżeń.
3. Wyrysuj wykres Entropii dla kanału binarnego w zależności od wartości P(1), na przedziale (0,1)
4. Napisz program, który dla zadanego pliku tekstowego tworzy tablicę częstotliwości znaków, kody Huffmana dla wszystkich znaków oraz wylicza entropię tego pliku i długość kodu Huffmana, który opisywałby cały plik