From 1cfc48ef6268ca379a79a9897ccd546924796320 Mon Sep 17 00:00:00 2001 From: pabhi77 <86058581+pabhi77@users.noreply.github.com> Date: Tue, 9 Aug 2022 00:30:45 +0530 Subject: [PATCH] Add files via upload --- Assignment 2/2020BTEIT00077_ASSI2/Abhi.jpeg | Bin 0 -> 22914 bytes .../2020BTEIT00077_ASSI2/compressed.jpeg | Bin 0 -> 3713 bytes Assignment 2/2020BTEIT00077_ASSI2/huffman.py | 132 ++++++++++++++++++ .../2020BTEIT00077_ASSI2/huffmanres.py | 91 ++++++++++++ .../2020BTEIT00077_ASSI2/observation.txt | 34 +++++ .../2020BTEIT00077_ASSI2/vecquantization.py | 40 ++++++ 6 files changed, 297 insertions(+) create mode 100644 Assignment 2/2020BTEIT00077_ASSI2/Abhi.jpeg create mode 100644 Assignment 2/2020BTEIT00077_ASSI2/compressed.jpeg create mode 100644 Assignment 2/2020BTEIT00077_ASSI2/huffman.py create mode 100644 Assignment 2/2020BTEIT00077_ASSI2/huffmanres.py create mode 100644 Assignment 2/2020BTEIT00077_ASSI2/observation.txt create mode 100644 Assignment 2/2020BTEIT00077_ASSI2/vecquantization.py diff --git a/Assignment 2/2020BTEIT00077_ASSI2/Abhi.jpeg b/Assignment 2/2020BTEIT00077_ASSI2/Abhi.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9046001797494d108a95ccb49349ccc14bc1b36b GIT binary patch literal 22914 zcmX_IWmuHW*S|MdTDlt~lv-NJ1wl{&QE3pCUb?%Mk_MFqr9+f%q(Mq*0RdSWB$V!k zKhOK&{V?}@yyu!T*O_yEF_9YT%EScp1ONaKKT}bBeK({38+fq0ZFjZcTxX-tGP=*SG?fR0Ssps(`Qco}D!tUrm#;f-M+_O0zwf zsYzhqbq4{@3G8Jl>GHsE<&z~eiPB`7iPwc?V} zG;87AD>Ywf=sD*;;J@p;u=;t|Z@sFvR;+cZ*SVLe-q59=bD*-9xoLJc;M8DP?)GZ+ z*PEA2yD3IKe-Es)POJwebc|be2E?udw#--`)g++fca)bmH?weaGGMT9 zF}eEnTbcfj-?|jZ#mV-J1WH2o+IlnHwv5ir*r@|2FScpndS}3Q{xEZtOY&%C+F*8> zdO)a`v6}Ib6LN1^yuNXW_EcH!Vzhg+W?Y?NyLt2Tu725Lry-XjsX6QO^4p7Y`Gv>p zpG2^uYk!NfTK&$tSd7Y=4}Qvz+-<_T;N33H^?3F)TJ2_9oR-ZE5KGKfY|Xd$N{0)W zVXLi1&StC@@^Fkvn57?;otG0&`30WsEsfshJPGfqZSg&gv%Nn3d~0;EAh}smT_<#0 zSKqSDN)CZ*K%kL1l0v!=ZpKq3=jLd%3lGy&HIo%ob`p zZP{homRkgo(6&3@w(PiJV?6s#Yb%qComh%Tc z%OoX|ygKD;HFEBzT45U5rx!emkLz(d>tRTN;F83x`^9@c$QL57Tkjt`#h#o_ z%IrAD+lPkRFtN@*NiA|EA%nt5|8=q4?5+N{%5W#P%%}24;j%|LK~A6PSm9)?!#jbu zmx7L7T@0{SJK=VaQ-?jPOz*V~+*f=-mv}S@m|WsOis6zaEIZ{bF?~zXCzqf4(fIwf z3F?y8HD-Hd*Z)QHjNx<7hcHa}CN2r1;f{ZnZ~0%V;`xK*dZG&lkLrxlpeRSLWnWef zQf-oK48GxoV%PE1LWT6fhj?At>v1{%(hpwQYSQh5M;ffVi9b9;qsq&yIQOCs8sEWg zePJVp+~Jx1!r58|sLrO+rrA}28I70O5e?h+4o!^TZ!n1JccjCEqpBn#A%M$L7|p$) zu-79kw~$?yFGU@q{A}#>sq-gw^~AZ3cZZJnomsOu8LnpFsb`=>X3k%9o-wk$?{aos z7J`m|QBNH~(AYhhgtF_A^G_psH`@z0_85}Xo~J0)nv*I^6clFv{gnB%p|=8F^Kr38 zxog*Z#J8-L1p{Yrm9erj9N>5K9vH2!+)$Q6A5CXnPj`jo?i;kO8oVoLmst5@M9xQi zdJ6m{mf%y~#fky3Z9Cht3Lddy_?SjV7w6BI(LcVTI5yXXs{8(%H>Yj4;%p2NfXMUF0+84g05w9ez_{U^p6h&bTh4FzG zMS=9!qkN~CPM!EGkFRCUI!KI+j=$=Z@&~nowjeBL?Wn-B+ZQ*U=Y8RF!m5(?iX^0@ z0((%f11JH5mx|px7m+&@!5spK0ogoajob6ATW=YMc91#2vM&N^bPXaj$w?~=+@1>9 z_L4Ai%kEuIQKAOJt0tP!0n(kR#HJX}@m)l|Eo$7xl+@KyAd%ReSn_^qmYB>u*pHVK< z?*yDSIUedkSJ_S7;u=%+H61Y+9q4lr>);e$vOh}jRCA0{A(j#X-@jnB6Qu8zX5V_z zcJv}er|n{5V2Oc5u*qYWKE~vy@kvz*F>yQc%PC(Fra|y#Sw3(WR4`ACS~gamJI8j)YO(LfNE&(_gV?xOd8aENJ<5!* zNiZ}#9h=7kv)r9{`*9Ts6CW;Svus@FtNW$qHpHKLno@A!*&~E&O?}y zq!I=5SvziAHsPD7Wb2f++ENn8B=sTyQwZvB$Lkam-Izk?23HYsu~ZPviy{36&6um3 z?{Xr8y$>_%l`=y%s*6_Ui5VQv2~{NYo#b#tYPWf{w%mVPlHzPC@Op|ZLRos5>1|cVCpOL00 zp_;5-Sjl{Q>!0Vk*+CMpR~H=`@aJ42u zlHk45xPGsLBZ9QqFW#AtV0(@9e>U%MW?hs(g8Of7ctjPxQjnNPK^Hy?a0UvLf(U zCr}Ja-kvk!Y6ztVO*On=dVs%1?+D^Ze?WxKZ_mv>PFaK_2RBfIR2FQU#c52M{q7mSp4H80T_85$W$`)XYuWts^OKkuO`Wn&0+@uDrpl4WoIyu2~r z4n}`KW*+5p^9u&-N8?t{<;9}RA0K@{j^-J6e7!~3lr&BaHrB=HU2ecW?FcP@i@BtgwXfWYPm(zw(%CWAX8Xfb_6NFng#EEiEZ;wmeUu zDjswY3JT$&Q~AfJtN1U)_-1r<)>Y056>*F63@@ku!j$T$_eZ0;Mh#ATbLy*Yc3QOb z6OL|>A?W=muy)~jcNyU30R#|ugcQ5eNOti^>mkcw%(&ExWf9_aSWOQ9_2x)w?VG|Q zCF3KdJhfB*4jR9X2&S6A3%VjfZpOgQgCyhgB*>I$-6+qDBUvL}@s4*eg2 zWRKeTXC-uSWHXY2)>@3&+1Bfg8uTq69xU&zvGG2Yu~12-6d?D@HmJi`s?Lwk2Y zNmR2C^)yRuZLOjE@r0QlmQ*S!cEi)c9qp~PC#*eEjp2hZZ;TxN(fr`Jc~@}#7T5hu zksi+W{MVq}UeF+^+U%D*IBJl6JIR+O?ONg~~S{ zm;S6NinWp^ti+6j>O4Usr*vT)0qtp4M4F>;6i88qk4kaIs7#9?yEMxmZ`=_Ys!K@dv z;kagHo#v$G0Gd!T;A(}X?do6o&A*Lb3z&D$=q+zj1=9_1o_-NB}wI% z-{SRd`V1$un@3iMi66t8_i%NEKHdBYuPhjMe9k=S1W#WM8a>kf+ni=T*�nUtk;M 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 literal 0 HcmV?d00001 diff --git a/Assignment 2/2020BTEIT00077_ASSI2/compressed.jpeg b/Assignment 2/2020BTEIT00077_ASSI2/compressed.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..ea6c0e1cb0b60e3889803bbba3286d21ca711c4b GIT binary patch literal 3713 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 literal 0 HcmV?d00001 diff --git a/Assignment 2/2020BTEIT00077_ASSI2/huffman.py b/Assignment 2/2020BTEIT00077_ASSI2/huffman.py new file mode 100644 index 0000000..2a98cb5 --- /dev/null +++ b/Assignment 2/2020BTEIT00077_ASSI2/huffman.py @@ -0,0 +1,132 @@ + +import re +import numpy as np +from PIL import Image +print("Huffman Compression Program") + +file = "Abhi.jpeg" +my_string = np.asarray(Image.open(file), np.uint8) +shape = my_string.shape +a = my_string + +my_string = str(my_string.tolist()) + + +letters = [] +only_letters = [] +for letter in my_string: + if letter not in letters: + frequency = my_string.count(letter) + letters.append(frequency) + letters.append(letter) + only_letters.append(letter) + +nodes = [] +while len(letters) > 0: + nodes.append(letters[0:2]) + letters = letters[2:] +nodes.sort() +huffman_tree = [] +huffman_tree.append(nodes) + + +def combine_nodes(nodes): + pos = 0 + newnode = [] + if len(nodes) > 1: + nodes.sort() + nodes[pos].append("1") + nodes[pos+1].append("0") + combined_node1 = (nodes[pos][0] + nodes[pos+1][0]) + combined_node2 = (nodes[pos][1] + nodes[pos+1][1]) + newnode.append(combined_node1) + newnode.append(combined_node2) + newnodes = [] + newnodes.append(newnode) + newnodes = newnodes + nodes[2:] + nodes = newnodes + huffman_tree.append(nodes) + combine_nodes(nodes) + return huffman_tree + + +newnodes = combine_nodes(nodes) + +huffman_tree.sort(reverse=True) +print("Huffman tree with merged pathways:") + +checklist = [] +for level in huffman_tree: + for node in level: + if node not in checklist: + checklist.append(node) + else: + level.remove(node) +count = 0 +for level in huffman_tree: + print("Level", count, ":", level) + count += 1 +print() + +letter_binary = [] +if len(only_letters) == 1: + lettercode = [only_letters[0], "0"] + letter_binary.append(letter_code*len(my_string)) +else: + for letter in only_letters: + code = "" + for node in checklist: + if len(node) > 2 and letter in node[1]: + code = code + node[2] + lettercode = [letter, code] + letter_binary.append(lettercode) +print(letter_binary) +print("Binary code generated:") +for letter in letter_binary: + print(letter[0], letter[1]) + +bitstring = "" +for character in my_string: + for item in letter_binary: + if character in item: + bitstring = bitstring + item[1] +binary = "0b"+bitstring +print("Your message as binary is:") + + +uncompressed_file_size = len(my_string)*7 +compressed_file_size = len(binary)-2 +print("Your original file size was", uncompressed_file_size, + "bits. The compressed size is:", compressed_file_size) +print("This is a saving of ", uncompressed_file_size-compressed_file_size, "bits") +output = open("compressed.txt", "w+") +print("Compressed file generated as compressed.txt") +output = open("compressed.txt", "w+") +print("Decoding.......") +output.write(bitstring) + +bitstring = str(binary[2:]) +uncompressed_string = "" +code = "" +for digit in bitstring: + code = code+digit + pos = 0 + for letter in letter_binary: + if code == letter[1]: + uncompressed_string = uncompressed_string+letter_binary[pos][0] + code = "" + pos += 1 + +temp = re.findall(r'\d+', uncompressed_string) +res = list(map(int, temp)) +res = np.array(res) +res = res.astype(np.uint8) +res = np.reshape(res, shape) +print(res) +print("Observe the shapes and input and output arrays are matching or not") +print("Input image dimensions:", shape) +print("Output image dimensions:", res.shape) +data = Image.fromarray(res) +data.save('original.png') +if a.all() == res.all(): + print("Success") \ No newline at end of file diff --git a/Assignment 2/2020BTEIT00077_ASSI2/huffmanres.py b/Assignment 2/2020BTEIT00077_ASSI2/huffmanres.py new file mode 100644 index 0000000..00a2c09 --- /dev/null +++ b/Assignment 2/2020BTEIT00077_ASSI2/huffmanres.py @@ -0,0 +1,91 @@ +Huffman Compression Program +Huffman tree with merged pathways: +Level 0 : [[324797, ' ,6734518092[]']] +Level 1 : [[131070, ' ,', '1'], [193727, '6734518092[]', '0']] +Level 2 : [[80799, '67345', '1'], [112928, '18092[]', '0']] +Level 3 : [[65535, ' ', '1'], [65535, ',', '0'], [112928, '18092[]', '0']] +Level 4 : [[50520, '1809', '1'], [62408, '2[]', '0'], [65535, ',', '0']] +Level 5 : [[38653, '6734', '1'], [42146, '5', '0'], [62408, '2[]', '0'], [65535, ',', '0']] +Level 6 : [[29382, '2', '1'], [33026, '[]', '0'], [42146, '5', '0'], [65535, ' ', '1']] +Level 7 : [[23643, '1', '1'], [26877, '809', '0'], [33026, '[]', '0'], [42146, '5', '0'], [65535, ',', '0']] +Level 8 : [[18426, '67', '1'], [20227, '34', '0'], [26877, '809', '0'], [33026, '[]', '0'], [65535, ' ', '1']] +Level 9 : [[16513, '[', '1'], [16513, ']', '0'], [20227, '34', '0'], [26877, '809', '0'], [42146, '5', '0'], [65535, ',', '0']] +Level 10 : [[10909, '8', '1'], [15968, '09', '0'], [16513, ']', '0'], [20227, '34', '0'], [29382, '2', '1'], [65535, ' ', '1']] +Level 11 : [[9766, '3', '1'], [10461, '4', '0'], [15968, '09', '0'], [16513, ']', '0'], [23643, '1', '1'], [42146, '5', '0'], [65535, ',', '0']] +Level 12 : [[9100, '6', '1'], [9326, '7', '0'], [10461, '4', '0'], [15968, '09', '0'], [16513, ']', '0'], [29382, '2', '1'], [65535, ' ', '1']] +Level 13 : [[7158, '0', '1'], [8810, '9', '0'], [9326, '7', '0'], [10461, '4', '0'], [16513, '[', '1'], [23643, '1', '1'], [42146, '5', '0'], [65535, ',', '0']] + +[['[', '00001'], ['4', '01100'], [',', '10'], [' ', '11'], ['2', '0001'], ['5', '010'], [']', '00000'], ['6', '01111'], ['0', '001001'], ['3', '01101'], ['7', '01110'], ['9', '001000'], ['8', '00101'], ['1', '0011']] +Binary code generated: +[ 00001 +4 01100 +, 10 + 11 +2 0001 +5 010 +] 00000 +6 01111 +0 001001 +3 01101 +7 01110 +9 001000 +8 00101 +1 0011 +Your message as binary is: +Your original file size was 2273579 bits. The compressed size is: 1109426 +This is a saving of 1164153 bits +Compressed file generated as compressed.txt +Decoding....... +[[[ 44 44 44 255] + [ 60 60 60 255] + [ 37 37 37 255] + ... + [ 37 37 37 255] + [ 37 37 37 255] + [ 38 38 38 255]] + + [[ 34 34 34 255] + [ 36 36 36 255] + [ 67 67 67 255] + ... + [ 43 43 43 255] + [ 45 45 45 255] + [ 43 43 43 255]] + + [[ 46 46 46 255] + [ 58 58 58 255] + [ 41 41 41 255] + ... + [ 61 61 61 255] + [ 58 58 58 255] + [ 47 47 47 255]] + + ... + + [[ 3 3 3 255] + [ 4 4 4 255] + [ 4 4 4 255] + ... + [ 78 78 78 255] + [ 73 73 73 255] + [ 75 75 75 255]] + + [[ 3 3 3 255] + [ 4 4 4 255] + [ 4 4 4 255] + ... + [ 84 84 84 255] + [ 65 65 65 255] + [ 74 74 74 255]] + + [[ 4 4 4 255] + [ 4 4 4 255] + [ 4 4 4 255] + ... + [ 85 85 85 255] + [ 71 71 71 255] + [ 74 74 74 255]]] +Observe the shapes and input and output arrays are matching or not +Input image dimensions: (128, 128, 4) +Output image dimensions: (128, 128, 4) +Success \ No newline at end of file diff --git a/Assignment 2/2020BTEIT00077_ASSI2/observation.txt b/Assignment 2/2020BTEIT00077_ASSI2/observation.txt new file mode 100644 index 0000000..6521866 --- /dev/null +++ b/Assignment 2/2020BTEIT00077_ASSI2/observation.txt @@ -0,0 +1,34 @@ +//Abhijeet Ashok Patil +//2020BTEIT00077 + + + + + +vector quantization ----- + + compression ratio = (uncompressed image size / compressed image size) + = (22.7 /3.62) + =6.27 + +encoding performance depends upon number of bits in the image,avg time complexity o(nlogn) + + + +Huffman algo code: + + i) consist of the huffman.py file which is the of the Huffman Algorithm. It gives the encoded image and bits values after the execution of algorithm. + ii) folder contains "Abhi.jpeg" image which is in th eform of grayscale image. + iii) compressed.txt is the binary encoded image.which include all paths for bits inside image inputted. + + +inputted image -------- 128*128 pixels + size 22.7 kB + + +compressed image --------128*128 pixels + size 3.62 kB + + + + \ No newline at end of file diff --git a/Assignment 2/2020BTEIT00077_ASSI2/vecquantization.py b/Assignment 2/2020BTEIT00077_ASSI2/vecquantization.py new file mode 100644 index 0000000..6ea1d98 --- /dev/null +++ b/Assignment 2/2020BTEIT00077_ASSI2/vecquantization.py @@ -0,0 +1,40 @@ +import numpy as np +import scipy as sp +import matplotlib.pyplot as plot + +from sklearn import cluster + +from PIL import Image + +img = Image.open("Abhi.jpeg") +img = np.array(img) + + +n_clusters = 5 +np.random.seed(0) + +X = img.reshape((-1, 1)) +k_means = cluster.KMeans(n_clusters=n_clusters, n_init=4) +k_means.fit(X) +values = k_means.cluster_centers_.squeeze() +labels = k_means.labels_ + +# array from labels and values +img_compressed = np.choose(labels, values) +img_compressed.shape = img.shape + +vmin = img.min() +vmax = img.max() + +#inputted uncompressed image +plot.figure(1, figsize=(3, 2.2)) +plot.imshow(img.astype('uint8'), cmap=plot.cm.gray, vmin=vmin, vmax=256, ) + +# compressed image +plot.figure(2, figsize=(3, 2.2)) +plot.imshow(img_compressed.astype('uint8'), + cmap=plot.cm.gray, vmin=vmin, vmax=vmax, ) +Image.fromarray((img_compressed).astype("uint8")).save("compressed.png") + + +plot.show() \ No newline at end of file