-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBWT Compression.py
More file actions
41 lines (33 loc) · 1.43 KB
/
BWT Compression.py
File metadata and controls
41 lines (33 loc) · 1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import os
def bwt_transform(text):
rotations = [text[i:] + text[:i] for i in range(len(text))]
rotations.sort()
bwt_transformed = ''.join(rot[-1] for rot in rotations)
return bwt_transformed
def calculate_compression_factor(original_size, compressed_size):
return original_size / compressed_size
def process_image_in_chunks(file_path, chunk_size):
with open(file_path, 'rb') as file:
bwt_transformed = ""
while True:
chunk = file.read(chunk_size)
if not chunk:
break
chunk_str = chunk.decode('latin-1')
bwt_transformed += bwt_transform(chunk_str)
return bwt_transformed
if __name__ == "__main__":
# Image file path
image_file_path = "C:\\saiei\\VIT stuff\\research\\Data Compression DAA\\new\\codes\\image\\test1.jpg"
# Chunk size for processing the image
chunk_size = 1024
# Perform BWT in chunks
bwt_transformed = process_image_in_chunks(image_file_path, chunk_size)
# Calculate sizes
original_size_bits = os.path.getsize(image_file_path) * 8
compressed_size_bits = len(bwt_transformed) * 8
# Display BWT results
print("BWT Compression:")
print(f"Original Size: {original_size_bits} bits")
print(f"Compression Size: {compressed_size_bits} bits")
print(f"Compression Factor: {calculate_compression_factor(original_size_bits, compressed_size_bits)}")