PYTHON

[PYTHON] 공간 Filtering

G허니 2024. 8. 11. 20:43

 

이미지 프로세싱에서 필터링은 이미지의 품질을 개선하거나 특정 효과를 얻기 위해 이미지의 픽셀 값을 조정하는 기술입니다. 다양한 필터링 기법들이 있으며, 이들은 이미지의 노이즈를 제거하거나 엣지를 강조하는 데 사용됩니다.

대표적인 필터링 기법으로는 평균 필터(Mean Filter), 중간 필터(Median Filter), 라플라시안 필터(Laplacian Filter) 등이 있습니다.

 

  1. 노이즈 제거: 이미지에서 불필요한 잡음을 줄여서 더 부드럽고 선명한 이미지를 만듭니다.
  2. 엣지 감지: 이미지의 경계선을 강조하여 객체를 식별하기 쉽게 합니다.
  3. 블러링: 이미지를 흐릿하게 만들어 부드러운 효과를 줍니다.
필터링 코드

 

import tkinter
from tkinter import *
from PIL import ImageTk, Image
from tkinter import filedialog
import cv2
import sys

root = Tk()
root.title('21812055 장지헌')

tl = Label(root)
tl.config(text="CV 공간필터링 프로그램 구현\n") 
tl.pack(side="top")

t2 = Label(root)
t2.config(text="필터 사이즈", justify=LEFT)
t2.pack(side="left")     

fsize = 1

ent = Entry(root, textvariable=fsize)  # root라는 창에 입력창 생성
ent.config(width=5) 
ent.pack(side="left")

def open():
    root = tkinter.Tk()
    root.withdraw()
    dir_path = filedialog.askopenfilename(parent=root, initialdir="/", title='Please select a directory')
    return dir_path

def median(filterSize):
    src = cv2.imread(open())
    
    if src is None:
        print('Image load failed!')
        sys.exit()
    
    dst = cv2.medianBlur(src, filterSize)

    cv2.imshow('Before', src)
    cv2.imshow('After Median', dst)
    cv2.waitKey()

    cv2.destroyAllWindows()

def mean(filterSize):
    src = cv2.imread(open())
    
    if src is None:
        print('Image load failed!')
        sys.exit()

    dst = cv2.blur(src, (filterSize, filterSize))
    cv2.imshow('Before', src)
    cv2.imshow('After Mean', dst)
    cv2.waitKey()

def laplacian(filterSize):
    src = cv2.imread(open())
    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

    if src is None:
        print('Image load failed!')
        sys.exit()

    dst = cv2.Laplacian(gray, cv2.CV_8U, ksize=filterSize)
    cv2.imshow('Before', src)
    cv2.imshow('After Laplacian', dst)
    cv2.waitKey()

def medlap(filterSize):
    src = cv2.imread(open())

    if src is None:
        print('Image load failed!')
        sys.exit()
    
    dst = cv2.medianBlur(src, filterSize)
    gray = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)
    dst = cv2.Laplacian(gray, cv2.CV_8U, ksize=3)
    cv2.imshow('Before', src)
    cv2.imshow('After Laplacian', dst)
    cv2.waitKey()

cv2.destroyAllWindows()

ent_btn = Button(root, text='확인').pack(side="left")
mean_btn = Button(root, text='Mean Filter', command=lambda: mean(int(ent.get()))).pack()
median_btn = Button(root, text='Median Filter', command=lambda: median(int(ent.get()))).pack()
lap_btn = Button(root, text='Laplacian Filter', command=lambda: laplacian(int(ent.get()))).pack()
medlap_btn = Button(root, text='Median + Laplacian Filter', command=lambda: medlap(int(ent.get()))).pack()

root.mainloop()

 

  1. Tkinter GUI 생성: Tk()를 사용하여 기본 GUI 창을 생성하고, 제목을 설정합니다. 라벨과 입력창을 추가하여 필터 크기를 입력받습니다.
  2. 파일 열기 함수: open() 함수는 파일 다이얼로그를 통해 사용자가 이미지를 선택할 수 있도록 합니다.
  3. 필터 함수들:
    • Mean Filter: mean(filterSize) 함수는 평균 필터를 적용하여 이미지를 부드럽게 만듭니다.
    • Median Filter: median(filterSize) 함수는 중간 필터를 적용하여 노이즈를 제거합니다 .
    • Laplacian Filter: laplacian(filterSize) 함수는 엣지를 강조하여 이미지의 경계선을 뚜렷하게 합니다.
    • Median + Laplacian Filter: medlap(filterSize) 함수는 중간 필터 후 라플라시안 필터를 적용하여 노이즈를 제거한 후 엣지를 강조합니다.
  4. 버튼 생성: 각 필터를 적용할 수 있는 버튼을 생성하여 사용자가 필터를 선택하고 적용할 수 있도록 합니다.

이 프로그램을 통해 사용자는 다양한 필터를 적용하여 이미지를 처리하고 결과를 확인할 수 있습니다. 필터링 기술은 이미지 처리의 중요한 부분으로, 다양한 응용 분야에서 활용됩니다.

 

Mean Filter

 

Median Filter

 

Laplacian Filter

 

 

Median + Laplacian Filter

 

깃허브

https://github.com/Ghoney99/graphics-Vision