Python의 양방향 필터링
- 양방향 필터링이란
- Python에서 양방향 필터링을 수행하는 단계
-
Python의
bilateralFilter()
함수 -
bilateralFilter()
함수를 사용하여 Python에서 양방향 필터링 수행
필터링은 컴퓨터 비전 응용 프로그램에서 이미지를 처리하는 데 사용됩니다. 이 기사에서는 OpenCV 모듈을 사용하여 Python에서 양방향 필터링을 구현하는 방법에 대해 설명합니다.
양방향 필터링이란
양방향 필터링은 평활화 필터링 기술입니다. 각 픽셀 값을 이웃의 가중 평균 픽셀 값으로 대체하는 비선형 및 노이즈 감소 필터입니다.
양방향 필터링은 가장자리 전체의 픽셀을 평균화하지 않기 때문에 가장자리 보존 필터링이라고도 합니다.
Python에서 양방향 필터링을 수행하는 단계
양방향 필터링을 수행하기 위해 주로 4가지 작업을 수행합니다.
-
이미지의 각 픽셀을 이웃 픽셀의 가중 평균으로 바꿉니다.
-
각 이웃의 가중치는 현재 픽셀로부터의 거리에 의해 결정됩니다. 가장 가까운 픽셀에 가장 높은 가중치를 부여하고 먼 픽셀에 가장 낮은 가중치를 할당하는 각 픽셀에 가중치를 할당합니다.
이 작업을 수행하기 위해 공간 매개변수를 사용합니다.
-
이웃의 가중치는 또한 픽셀의 강도 차이에 따라 달라집니다. 현재 픽셀과 강도가 유사한 픽셀에는 더 많은 가중치가 할당되고 강도 차이가 큰 픽셀에는 더 낮은 가중치가 할당됩니다.
이 작업을 수행하기 위해 범위 매개변수를 사용합니다.
-
공간 매개변수를 증가시켜 이미지의 더 큰 특징을 부드럽게 할 수 있습니다. 반면에 범위 매개변수를 늘리면 양방향 필터링이 가우스 필터링처럼 작동합니다.
Python의 bilateralFilter()
함수
bilateralFilter()
함수를 사용하여 OpenCV 모듈을 사용하여 Python에서 양방향 필터링을 수행할 수 있습니다. bilateralFilter()
함수의 구문은 다음과 같습니다.
bilateralFilter(src, d, sigmaColor, sigmaSpace, borderType)
여기,
-
src
매개변수는 입력 인수로 처리해야 하는 소스 이미지를 사용합니다. -
매개변수
d
는 필터링하는 동안 픽셀이 고려되는 이웃의 직경을 취합니다. -
매개변수
sigmaColor
는 색상 공간의 필터 시그마 값입니다.sigmaColor
값이 높을수록 색상 공간에서 더 멀리 떨어져 있는 색상이 필터링되는 동안 고려된다는 의미입니다.sigmaColor
매개변수는sigmaSpace
범위의 값을 포함해야 합니다. -
매개변수
sigmaSpace
는 공간 영역에서 시그마의 값을 나타냅니다.sigmaSpace
의 값이 높을수록 필터링하는 동안 현재 픽셀에서 더 멀리 떨어진 픽셀이 고려됨을 의미합니다.sigmaSpace
매개변수는sigmaColor
범위의 값을 포함해야 합니다. -
매개변수
borderType
은 이미지 경계의 픽셀을 필터링하면서 이미지 외부의 픽셀을 외삽하는 모드를 정의하는 데 사용됩니다.
bilateralFilter()
함수를 사용하여 Python에서 양방향 필터링 수행
다음은 Python에서 양방향 필터링을 수행하는 단계입니다.
-
먼저
cv2
를 가져올 것입니다. -
다음으로, 이미지의 파일 경로를 입력 인수로 사용하고 이미지를 나타내는 배열을 반환하는
imread()
함수를 사용하여 이미지를 엽니다. -
변수
img
에 배열을 저장합니다. -
이미지를 로드한 후
bilateralFilter()
함수를 사용하여 Python에서 양방향 기능을 수행합니다. 실행 후bilateralFilter()
함수는 처리된 이미지가 포함된 배열을 반환합니다. -
처리된 이미지를 얻은 후
imwrite()
함수를 사용하여 파일 시스템에 저장합니다. 이 함수는 출력 파일의 파일 이름을 포함하는 문자열을 첫 번째 입력 인수로 사용하고 처리된 이미지가 포함된 배열을 두 번째 입력으로 사용합니다. 논쟁. 기능을 실행한 후 파일은 파일 시스템에 저장됩니다.
아래는 Python에서 양방향 필터링을 수행하는 데 사용할 이미지입니다.
다음은 Python에서 양방향 필터링을 수행하는 코드입니다.
import cv2
img = cv2.imread("pattern.jpg")
output_image = cv2.bilateralFilter(img, 15, 100, 100)
cv2.imwrite("processed_image.jpg", output_image)
다음은 입력 이미지에 대해 양방향 필터링을 수행한 후 출력 이미지입니다.
주어진 이미지에서 스트립의 특징이 출력 이미지에서 흐려지는 것을 관찰할 수 있습니다. 이는 출력 픽셀을 생성할 때 각 픽셀의 인접 픽셀을 고려하기 때문입니다.
픽셀을 평균화하면 흐릿한 효과가 나타나고 기능이 흐려집니다.
가우스 필터링과 비교할 때 양방향 필터링은 가장자리를 유지합니다. 따라서 평활화 작업을 수행하는 동안 이미지의 가장자리를 보존해야 하는 경우 항상 양방향 필터링을 사용할 수 있습니다.
Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.
GitHub