Commit a9cb27ad authored by Sparkf's avatar Sparkf 🏙️
Browse files

optimize butterworse

parent 23e15e01
Loading
Loading
Loading
Loading
+31 −10
Original line number Diff line number Diff line
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
from joblib import Parallel, delayed
import time
import lab5_lib

from skimage import io, data

def butterworse_pass_11812418(input_img, sigma):
    # Reading of the image into numpy array:
    img = Image.open(input_img)
    # FFT transform for img arr
    input_image = np.asarray(img)

def gaussian_pass_11812418(input_image, sigma):
    input_image = lab5_lib.FFT_zero_padding(input_image)
    row, col = input_image.shape

    input_image = np.fft.fft2(input_image)
    input_image = np.fft.fftshift(input_image)
    # define gaussian
    gaussian_filter = lab5_lib.generate_butterworth(row, col, 1, sigma)
    plt.imshow(gaussian_filter)
    #492,336

    # define butterworth
    butterworth_filter = 1-lab5_lib.generate_butterworth(40, 40, 2, sigma)
    bf_x = [70,150,310,395]
    bf_y = [90,210]

    for x in bf_x:
        for y in bf_y:
            input_image[x:x+40,y:y+40] = np.multiply(input_image[x:x+40,y:y+40],butterworth_filter)
    plt.imshow(np.log(np.abs(input_image)))
    plt.show()
    filtered_img = np.multiply(input_image, gaussian_filter)

    # plt.imshow(input_image)
    # plt.show()
    filtered_img = input_image
    # filtered_img = np.multiply(input_image, butterworth_filter)
    output_img = np.fft.ifft2(np.fft.ifftshift(filtered_img))
    output_img = lab5_lib.transform_centering(output_img)
    plt.imshow(np.real(output_img))
    plt.show()
    output_img = lab5_lib.normalize(output_img)*255
    # plt.imshow(np.real(output_img))
    # plt.show()

    return np.abs(output_img)


if __name__ == '__main__':
    gaussian_pass_11812418(io.imread("Q5_3.tif"), 100)
    start_time = time.time()
    A = butterworse_pass_11812418("Q5_3.tif", 100)
    op_image = Image.fromarray(A.astype(np.uint8))
    print("--- %s seconds ---" % (time.time() - start_time))
    op_image.save("output/Q5_3_M.tif")
+35 −7
Original line number Diff line number Diff line
@@ -5,10 +5,14 @@ from joblib import Parallel, delayed
import time
import lab5_lib

from skimage import io, data

def gaussian_pass_11812418(input_img, sigma):
    # Reading of the image into numpy array:
    img = Image.open(input_img)
    # FFT transform for img arr
    input_image_origin = np.asarray(img)
    input_image = np.asarray(img)

def gaussian_pass_11812418(input_image, sigma):
    input_image = lab5_lib.FFT_zero_padding(input_image)
    row, col = input_image.shape

@@ -16,14 +20,38 @@ def gaussian_pass_11812418(input_image, sigma):
    input_image = np.fft.fftshift(input_image)
    # define gaussian
    gaussian_filter = lab5_lib.generate_gaussian(row, col, sigma)
    plt.imshow(gaussian_filter)
    plt.show()
    # print(gaussian_filter)
    # plt.imshow(gaussian_filter)
    # plt.show()
    filtered_img = np.multiply(input_image, gaussian_filter)
    output_img = np.fft.ifft2(np.fft.ifftshift(filtered_img))
    output_img = lab5_lib.transform_centering(output_img)
    plt.imshow(np.real(output_img))
    plt.show()
    # print(np.min(np.abs(output_img)))
    # output_img = lab5_lib.normalize(output_img)
    # plt.imshow(np.real(output_img))
    # plt.show()

    return np.abs(output_img), np.abs(input_image_origin-output_img)


if __name__ == '__main__':
    gaussian_pass_11812418(io.imread("Q5_2.tif"), 0.01)
    start_time = time.time()
    A_LP,A_HP = gaussian_pass_11812418("Q5_2.tif", 30)
    op_image_LP = Image.fromarray(A_LP.astype(np.uint8))
    op_image_LP.save("output/Q5_2_LP30.tif")
    op_image_HP = Image.fromarray(A_HP.astype(np.uint8))
    op_image_HP.save("output/Q5_2_HP30.tif")
    A_LP,A_HP = gaussian_pass_11812418("Q5_2.tif", 60)
    op_image_LP = Image.fromarray(A_LP.astype(np.uint8))
    op_image_LP.save("output/Q5_2_LP60.tif")
    op_image_HP = Image.fromarray(A_HP.astype(np.uint8))
    op_image_HP.save("output/Q5_2_HP60.tif")
    A_LP,A_HP = gaussian_pass_11812418("Q5_2.tif", 160)
    op_image_LP = Image.fromarray(A_LP.astype(np.uint8))
    op_image_LP.save("output/Q5_2_LP160.tif")
    op_image_HP = Image.fromarray(A_HP.astype(np.uint8))
    op_image_HP.save("output/Q5_2_HP160.tif")


    print("--- %s seconds ---" % (time.time() - start_time))
+12 −12
Original line number Diff line number Diff line
@@ -6,9 +6,6 @@ import time
import lab5_lib





def conv(input_img, kernel_flat):
    row, col = input_img.shape

@@ -40,6 +37,7 @@ def sobel_11812418(input_img):

    # FFT transform for img arr
    img_arr = np.asarray(img)
    input_image_origin = np.asarray(img)

    row, col = img_arr.shape

@@ -56,8 +54,6 @@ def sobel_11812418(input_img):

    DFT_kernel_1_fft = lab5_lib.DFT_kernel(img_arr, kernel1)



    # K1
    filtered_1 = np.real(np.fft.ifft2(img_arr_fft * DFT_kernel_1_fft))
    filtered_1 = lab5_lib.FFT_extract_padding(filtered_1)
@@ -65,23 +61,27 @@ def sobel_11812418(input_img):
    # plt.imshow(filtered_1)
    # plt.show()



    # conv
    # op_img = np.fft.ifft2(conv(img_arr, kernel_flat))
    # print(filtered_1)
    op_img = lab5_lib.normalize(filtered_1) * 255
    op_img = np.clip(op_img, 110, 140)
    op_img = np.clip(op_img, 115, 145)
    op_img = lab5_lib.normalize(op_img)*255
    print(op_img)

    plt.imshow(op_img)
    plt.show()

    return op_img
    op_img_spacial = conv(input_image_origin,kernel1.flatten())
    op_img_spacial = lab5_lib.normalize(op_img_spacial)*255

    return op_img, op_img_spacial


start_time = time.time()
A = sobel_11812418("Q5_1.tif")
A, A_S = sobel_11812418("Q5_1.tif")
op_image = Image.fromarray(A.astype(np.uint8))
op_image_S = Image.fromarray(A_S.astype(np.uint8))
print("--- %s seconds ---" % (time.time() - start_time))
op_image.save("output/Q5_1_M.tif")
op_image_S.save("output/Q5_1_M_S.tif")