Commit 23e15e01 authored by Sparkf's avatar Sparkf 🏙️
Browse files

lab5-1

parent b97de0d1
Loading
Loading
Loading
Loading
+29 −0
Changes for lab5/butterworse_notch.py: 29 added lines, 0 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 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)
    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()


if __name__ == '__main__':
    gaussian_pass_11812418(io.imread("Q5_3.tif"), 100)

lab5/gaussian.py

0 → 100755
+29 −0
Changes for lab5/gaussian.py: 29 added lines, 0 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 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_gaussian(row, col, sigma)
    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()


if __name__ == '__main__':
    gaussian_pass_11812418(io.imread("Q5_2.tif"), 0.01)

lab5/sobel.py

0 → 100755
+87 −0
Changes for lab5/sobel.py: 87 added lines, 0 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





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

    def pad_with(vector, pad_width, iaxis, kwargs):
        pad_value = kwargs.get('padder', 0)
        vector[:pad_width[0]] = pad_value
        vector[-pad_width[1]:] = pad_value

    input_img_padding = np.pad(input_img, 1, pad_with, padder=0)

    # def par func
    def single_conv(i, j):
        im_arr = input_img_padding[(i - 1):(i + 2), (j - 1):(j + 2)].flatten()
        return np.sum(im_arr * kernel_flat)

    par_output = np.array(Parallel(n_jobs=6)(delayed(single_conv)(i, j)
                                             for i in range(1, row + 1)
                                             for j in range(1, col + 1)
                                             ))

    Lap = np.reshape(par_output, input_img.shape)
    return Lap


def sobel_11812418(input_img):
    pic_num = 1
    # Reading of the image into numpy array:
    img = Image.open(input_img)

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

    row, col = img_arr.shape

    # FFT Padding
    img_arr = lab5_lib.FFT_zero_padding(img_arr)

    img_arr = lab5_lib.multiply_center(img_arr)

    img_arr_fft = np.fft.fft2(img_arr)
    # plt.imshow(20*np.log(np.abs((np.fft.fft2(img_arr)))))
    # plt.show()

    kernel1 = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])

    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)
    filtered_1 = lab5_lib.multiply_center(filtered_1)
    # 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)
    print(op_img)

    plt.imshow(op_img)
    plt.show()

    return op_img


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