In: Computer Science
compress(image)
Description:
It compresses a grayscale image and returns a data structure (list of lists) that holds a summary of the content, based on the following algorithm: First, we construct from the original image a black and white bitmap – values less than 128 are mapped to black and the rest are mapped to white. Then, we encode each row of this bitmap as a list containing the lengths of the alternating black and white sequences. Last, we package all these lists in an outer list. You can think of the encoding of each row as the process of counting the length of the consecutive black and white pixels (starting always with the black pixels) and adding these values in a list in the same order as we encounter the alternating black and white sequences. Obviously, each row, depending on its content, will have a different number of alternating sequences, so the full data structure will most probably be a list of variable-size sublists.
Parameters: image (2D list of int) is the grayscale image
Return value: A list of lists that summarizes the image
Example:
compress([[100,170,200,111,250,128],
[223,244,255,115,127,105],
[100,100,100,120,120,120]]) → [ [1, 2, 1, 2], [0, 3, 3], [6] ]
Hi. I have answered this question before. Here is the completed code for this problem. Comments are included, go through it, learn how things work and let me know if you have any doubts or if you need anything to change. If you are satisfied with the solution, please rate the answer. Thanks
Note: Please maintain proper code spacing (indentation), just copy the code part and paste it in your compiler/IDE directly, no modifications required.
#code
''' required method '''
def compress(image):
#creating a list to store the result
summary=[]
#looping through each row
for row in image:
#initializing count to 0
count=0
#currently processing black pixels
black=True
#list to store the consecutive black, white pixels in current row
current_summary=[]
# looping through each column in current row
for col in row:
#if col<128, it is counted as black, else white
if col<128:
#checking if we are already processing black
if black:
#simply incrementing count
count+=1
else:
#otherwise append current count to current_summary
current_summary.append(count)
#resetting count to 1
count=1
#setting black to True
black=True
else: #white
#if we are already processing white, incrementing count
if not black:
count+=1
else:
#otherwise appending count to current_summary
current_summary.append(count)
#updating count
count=1
#setting black to False
black=False
#at the end, if count is above 0, appending to current_summary
if count>0:
current_summary.append(count)
#appending current_summary to summary list
summary.append(current_summary)
#returning the list
return summary