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

optimize butterworse

parent 23e15e01
Loading
Loading
Loading
Loading
+31 −10
Changes for lab5/butterworse_notch.py: 31 added lines, 10 removed lines.
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
Changes for lab5/gaussian.py: 35 added lines, 7 removed lines.
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))
+10 −10
Changes for lab5/sobel.py: 10 added lines, 10 removed lines.
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")