Commit cfb96985 authored by Bryce Hepner's avatar Bryce Hepner
Browse files

Mathematical changes and testing

parent 9b1db8a3
Loading
Loading
Loading
Loading
+15 −15
Original line number Original line Diff line number Diff line
from turtle import color
from WorkingPyDemo import *
from WorkingPyDemo import *
def produce_error_array(encoded_string, list_dic, bins, use_diff):
def produce_error_array(encoded_string, list_dic, bins, use_diff):
    """
    """
@@ -88,11 +87,12 @@ def color_adjust(visual_array):
    adjusted_array = visual_array - min_of_errors
    adjusted_array = visual_array - min_of_errors
    adjusted_array = np.round(adjusted_array*255/np.max(adjusted_array))
    adjusted_array = np.round(adjusted_array*255/np.max(adjusted_array))
    return adjusted_array
    return adjusted_array
if __name__ == "__main__":
    scenes = file_extractor(folder_name)
    scenes = file_extractor(folder_name)
    images = image_extractor(scenes)
    images = image_extractor(scenes)
    list_dic = np.load("first_dic.npy", allow_pickle="TRUE")
    list_dic = np.load("first_dic.npy", allow_pickle="TRUE")
    bins = [21,32,48]
    bins = [21,32,48]
encoded_string2 = bytes_to_bitstring(read_from_file(images[250][:-5] + "_Compressed.txt"))
    encoded_string2 = bytes_to_bitstring(read_from_file(images[1][:-5] + "_Compressed.txt"))
    original_array, error_array = produce_error_array(encoded_string2, list_dic, bins, False)
    original_array, error_array = produce_error_array(encoded_string2, list_dic, bins, False)
    adjusted_errors = color_adjust(abs(error_array))
    adjusted_errors = color_adjust(abs(error_array))
    original_array_adjusted = color_adjust(original_array)
    original_array_adjusted = color_adjust(original_array)

Remove_Noise.py

0 → 100644
+36 −0
Original line number Original line Diff line number Diff line
from matplotlib.image import composite_images
from WorkingPyDemo import *

def remove_noise(images, which_sensor):
    same_sensor_images = []
    which_sensor = str(which_sensor)
    average_image = np.zeros_like(np.array(Image.open(images[0]))[1:])
    for i, image_name in enumerate(images):
        if int(which_sensor) > 9:
            if image_name[-7:-5] == which_sensor:
                same_sensor_images.append(image_name)
        else:
            if image_name[-7:-5] == "_" + which_sensor:
                same_sensor_images.append(image_name)
    for i, image_name in enumerate(same_sensor_images):
        # print(image_name)
        image_object = Image.open(image_name)
        # print(np.array(image_object).shape)
        # print(np.array(image_object)[1:] + average_image)
        average_image = np.array(image_object)[1:] + average_image
    return average_image/len(same_sensor_images)
scenes = file_extractor(folder_name)
images = image_extractor(scenes)
average_image = remove_noise(images,"7")
def color_adjust(visual_array):
    min_of_errors = np.min(visual_array)
    adjusted_array = visual_array - min_of_errors
    adjusted_array = np.round(adjusted_array*255/np.max(adjusted_array))
    return adjusted_array
print(np.max(average_image))
print(np.min(average_image))
plt.imshow(color_adjust(average_image),cmap='gray',vmin = 0, vmax=255)
plt.show()

# print(np.linalg.inv(np.array([[3,0,-1],[0,3,3],[1,-3,-4]])))
print(np.linalg.pinv(np.array([[-1,-1,1], [-1,0,1], [-1,1,1], [0,-1,1]])))
 No newline at end of file
+27 −14
Original line number Original line Diff line number Diff line
@@ -76,7 +76,8 @@ def predict_pix(tiff_image_path, difference = True):
    image_obj = Image.open(tiff_image_path)    #Open the image and read it as an Image object
    image_obj = Image.open(tiff_image_path)    #Open the image and read it as an Image object
    image_array = np.array(image_obj)[1:,:].astype(int)    #Convert to an array, leaving out the first row because the first row is just housekeeping data
    image_array = np.array(image_obj)[1:,:].astype(int)    #Convert to an array, leaving out the first row because the first row is just housekeeping data
    # image_array = image_array.astype(int) 
    # image_array = image_array.astype(int) 
    A = np.array([[3,0,-1],[0,3,3],[1,-3,-4]]) # the matrix for system of equation
    # A = np.array([[3,0,-1],[0,3,3],[1,-3,-4]]) # the matrix for system of equation
    Ainv = np.array([[0.5,-0.5,-0.5],[-0.5,1.83333333,1.5],[0.5,-1.5,-1.5]])
    # where z0 = (-1,1), z1 = (0,1), z2 = (1,1), z3 = (-1,0)
    # where z0 = (-1,1), z1 = (0,1), z2 = (1,1), z3 = (-1,0)
    z0 = image_array[0:-2,0:-2]   # get all the first pixel for the entire image
    z0 = image_array[0:-2,0:-2]   # get all the first pixel for the entire image
    z1 = image_array[0:-2,1:-1]   # get all the second pixel for the entire image
    z1 = image_array[0:-2,1:-1]   # get all the second pixel for the entire image
@@ -91,8 +92,8 @@ def predict_pix(tiff_image_path, difference = True):
    
    
    # use numpy solver to solve the system of equations all at once
    # use numpy solver to solve the system of equations all at once
    #predict = np.floor(np.linalg.solve(A,y)[-1])
    #predict = np.floor(np.linalg.solve(A,y)[-1])
    predict = np.round(np.round((np.linalg.solve(A,y)[-1]),1))
    # predict = np.round(np.round((np.linalg.solve(A,y)[-1]),1))
    
    predict = np.round(np.round((Ainv[-1]@y)),1)
    #Matrix system of points that will be used to solve the least squares fitting hyperplane
    #Matrix system of points that will be used to solve the least squares fitting hyperplane
    points = np.array([[-1,-1,1], [-1,0,1], [-1,1,1], [0,-1,1]])
    points = np.array([[-1,-1,1], [-1,0,1], [-1,1,1], [0,-1,1]])
    
    
@@ -113,7 +114,12 @@ def predict_pix(tiff_image_path, difference = True):
        #points to the hyperplane), it is a measure of gradient
        #points to the hyperplane), it is a measure of gradient
        f, diff, rank, s = la.lstsq(points, neighbor.T, rcond=None)
        f, diff, rank, s = la.lstsq(points, neighbor.T, rcond=None)
        diff = diff.astype(int)
        diff = diff.astype(int)
        # Pinv = np.linalg.pinv(points)
        # b = [z0,z1,z2,z3]
        # x = Pinv@np.array(b)


        # diff = np.linalg.norm(b - points@x,ord=2)
        # diff = diff.astype(int)
    # calculate the error
    # calculate the error
    error = np.ravel(image_array[1:-1,1:-1])-predict
    error = np.ravel(image_array[1:-1,1:-1])-predict
    
    
@@ -402,6 +408,7 @@ def decoder(encoded_string, list_dic, bins, use_diff):
    decode_matrix   (512, 640): decoded matrix
    decode_matrix   (512, 640): decoded matrix
    """
    """
    A = np.array([[3,0,-1],[0,3,3],[1,-3,-4]]) # the matrix for system of equation
    A = np.array([[3,0,-1],[0,3,3],[1,-3,-4]]) # the matrix for system of equation
    Ainv = np.array([[0.5,-0.5,-0.5],[-0.5,1.83333333,1.5],[0.5,-1.5,-1.5]])
    # change the dictionary back to list
    # change the dictionary back to list
    # !!!!!WARNING!!!! has to change this part, everytime you change the number of bins
    # !!!!!WARNING!!!! has to change this part, everytime you change the number of bins
    the_keys0 = list(list_dic[0].keys())
    the_keys0 = list(list_dic[0].keys())
@@ -421,7 +428,7 @@ def decoder(encoded_string, list_dic, bins, use_diff):
    
    
    #Matrix system of points that will be used to solve the least squares fitting hyperplane
    #Matrix system of points that will be used to solve the least squares fitting hyperplane
    points = np.array([[-1,-1,1], [-1,0,1], [-1,1,1], [0,-1,1]])
    points = np.array([[-1,-1,1], [-1,0,1], [-1,1,1], [0,-1,1]])
    
    # Pinv = np.linalg.pinv(points)
    decode_matrix = np.zeros((512,640))
    decode_matrix = np.zeros((512,640))
    # loop through all the element in the matrix
    # loop through all the element in the matrix
    for i in range(decode_matrix.shape[0]):
    for i in range(decode_matrix.shape[0]):
@@ -449,11 +456,14 @@ def decoder(encoded_string, list_dic, bins, use_diff):
                if use_diff:
                if use_diff:
                    difference = max(z0,z1,z2,z3) - min(z0,z1,z2,z3)
                    difference = max(z0,z1,z2,z3) - min(z0,z1,z2,z3)
                else:
                else:
                    
                    # b = [z0,z1,z2,z3]
                    # x = Pinv@np.array(b)
                    # difference = np.linalg.norm(b - points@x,ord=2)
                    f, difference, rank, s = la.lstsq(points, [z0,z1,z2,z3], rcond=None) 
                    f, difference, rank, s = la.lstsq(points, [z0,z1,z2,z3], rcond=None) 
                    difference = difference.astype(int)
                    difference = difference.astype(int)
                    
                    
                predict = np.round(np.round(np.linalg.solve(A,y)[-1][0],1))
                # predict = np.round(np.round(np.linalg.solve(A,y)[-1][0],1))
                predict = np.round(np.round((Ainv[-1]@y)[0],1))
                # add on the difference by searching the dictionary
                # add on the difference by searching the dictionary
                # !!!!!WARNING!!!! has to change this part, eveytime you change the number of bins
                # !!!!!WARNING!!!! has to change this part, eveytime you change the number of bins
                if difference <= bins[0]:
                if difference <= bins[0]:
@@ -501,19 +511,19 @@ def text_to_tiff(filename, list_dic, bins):
    reconstruct_image = reconstruct_image.astype(np.uint16)
    reconstruct_image = reconstruct_image.astype(np.uint16)
    reconstruct_image = Image.fromarray(reconstruct_image)
    reconstruct_image = Image.fromarray(reconstruct_image)
    reconstruct_image.save(filename[:-16]+"_reconstructed.tiff", "TIFF")
    reconstruct_image.save(filename[:-16]+"_reconstructed.tiff", "TIFF")
# starttime = time()

if __name__ == "__main__":
if __name__ == "__main__":
    
    
    scenes = file_extractor(folder_name)
    scenes = file_extractor(folder_name)
    images = image_extractor(scenes)
    images = image_extractor(scenes)
    newnamesforlater = []
    newnamesforlater = []
    # list_dic, bins = make_dictionary(images, 4, False)
    # list_dic, bins = make_dictionary(images[0:1], 4, False)
    file_sizes_new = []
    file_sizes_new = []
    file_sizes_old = []
    file_sizes_old = []
    list_dic = np.load("first_dic.npy", allow_pickle="TRUE")
    list_dic = np.load("first_dic.npy", allow_pickle="TRUE")
    bins = [21,32,48]
    bins = [21,32,48]
    # np.save("first_dic.npy", list_dic)
    # np.save("first_dic.npy", list_dic)
    for i in range(len(images)):
    for i in range(len(images[0:5])):
        # image, new_error, diff = huffman(images[i], 4, False)
        # image, new_error, diff = huffman(images[i], 4, False)
        # encoded_string = encoder(new_error, list_dic, diff, bins)
        # encoded_string = encoder(new_error, list_dic, diff, bins)
        # inletters = bitstring_to_bytes(encoded_string)
        # inletters = bitstring_to_bytes(encoded_string)
@@ -535,18 +545,21 @@ if __name__ == "__main__":
    
    
    file_sizes_new.append(os.path.getsize("first_dic.npy"))
    file_sizes_new.append(os.path.getsize("first_dic.npy"))
    print(np.sum(file_sizes_new)/np.sum(file_sizes_old))
    print(np.sum(file_sizes_new)/np.sum(file_sizes_old))
    list_dic = np.load("first_dic.npy", allow_pickle="TRUE")
    # list_dic = np.load("first_dic.npy", allow_pickle="TRUE")
    bins = [21,32,48]
    bins = [21,32,48]
    # starttime = time()
    
    for i,item in enumerate(newnamesforlater[0:5]):
    for i,item in enumerate(newnamesforlater):
        print(item)
        print(item)
        image, new_error, diff = huffman(images[i], 4, False)
        image, new_error, diff = huffman(images[i], 4, False)
        encoded_string2 = bytes_to_bitstring(read_from_file(item))
        encoded_string2 = bytes_to_bitstring(read_from_file(item))
        starttime = time()
        reconstruct_image = decoder(encoded_string2, list_dic, bins, False)
        reconstruct_image = decoder(encoded_string2, list_dic, bins, False)
        print(np.allclose(image, reconstruct_image))
        print(np.allclose(image, reconstruct_image))
        print(time() - starttime)
    # text_to_tiff("images/1626033496_437803/1626033496_437803_3._Compressed.txt", list_dic, bins)
    # text_to_tiff("images/1626033496_437803/1626033496_437803_3._Compressed.txt", list_dic, bins)
    # original_image = Image.open("images/1626033496_437803/1626033496_437803_3.tiff")
    # original_image = Image.open("images/1626033496_437803/1626033496_437803_3.tiff")
    # original_image = np.array(original_image)[1:]
    # original_image = np.array(original_image)[1:]
    # secondimage = Image.open("images/1626033496_437803/1626033496_437803_3_reconstructed.tiff")
    # secondimage = Image.open("images/1626033496_437803/1626033496_437803_3_reconstructed.tiff")
    # secondimage = np.array(secondimage)
    # secondimage = np.array(secondimage)
    # print(np.allclose(original_image, secondimage))
    # print(np.allclose(original_image, secondimage))
    
 No newline at end of file