참고: 이 게시물에서는 쉽게 따라할 수 있도록 회색조 이미지만 사용합니다.
이미지는 값의 행렬로 생각할 수 있으며, 각 값은 픽셀의 강도를 나타냅니다. 이미지 형식에는 세 가지 주요 유형이 있습니다.
필터는 특정 작업을 적용하여 이미지를 수정하는 데 사용되는 도구입니다. 필터는 이미지를 가로질러 이동하면서 해당 창 내의 픽셀 값에 대해 계산을 수행하는 행렬(커널이라고도 함)입니다. 우리는 두 가지 일반적인 필터 유형, 즉 평균 필터와 중앙값 필터를 다룰 것입니다.
평균 필터는 창 내의 픽셀 값을 평균화하여 노이즈를 줄이는 데 사용됩니다. 창의 중앙 픽셀을 해당 창 내의 모든 픽셀 값의 평균으로 바꿉니다. cv2.blur() 함수는 커널 크기가 3x3인 평균 필터를 적용합니다. 이는 평균을 계산하기 위해 각 픽셀 주위의 픽셀의 3x3 창을 고려한다는 의미입니다. 이는 이미지를 부드럽게 만드는 데 도움이 됩니다.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) # Applies a Mean Filter of size 3 x 3 blurred_image = cv2.blur(image, (3, 3)) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(blurred_image, cmap='gray') plt.title('Mean Filtered Image') plt.axis("off") plt.show()
중앙값 필터는 각 픽셀의 값을 창에 있는 모든 픽셀의 중앙값으로 대체하여 노이즈를 줄이는 데 사용됩니다. 이는 소금과 후추 소음을 제거하는 데 특히 효과적입니다. cv2.medianBlur() 함수는 커널 크기가 3인 중앙값 필터를 적용합니다. 이 메서드는 각 픽셀을 인접 픽셀 값의 중앙값으로 대체하므로 노이즈를 제거하는 동시에 가장자리를 유지하는 데 도움이 됩니다. 여기서 커널 크기가 클수록 이미지가 더 흐려집니다.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) # Applies a Median Filter with a kernel size of 3 blurred_image = cv2.medianBlur(image, 3) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(blurred_image, cmap='gray') plt.title('Median Filtered Image') plt.axis("off") plt.show()
맞춤 필터를 만들어 이미지에 특정 작업을 적용할 수 있습니다. cv2.filter2D() 함수를 사용하면 사용자 정의 커널을 이미지에 적용할 수 있습니다. cv2.filter2D() 함수는 이미지에 사용자 정의 커널(필터)을 적용합니다. 커널은 픽셀 값에 대해 수행할 작업을 정의하는 행렬입니다. 이 예에서 커널은 지정된 값을 기반으로 이미지의 특정 기능을 향상시킵니다.
import cv2 import numpy as np import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) # Define a custom filter kernel kernel = np.array([[2, -1, 5], [-5, 5, -1], [0, -1, 0]]) filtered_image = cv2.filter2D(image, -1, kernel) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis('off') plt.subplot(1, 2, 2) plt.imshow(filtered_image, cmap='gray') plt.title('Filtered Image') plt.axis('off') plt.show()
참고: 코드 조각에서 임계값 이미지를 할당할 때 _ 이미지가 표시됩니다. 이는 cv2.threshold 함수가 사용된 임계값과 임계값 이미지라는 두 가지 값을 반환하기 때문입니다. 임계값 이미지만 필요하므로 _를 사용하여 임계값을 무시합니다.
임계값은 조건에 따라 픽셀 값을 설정하여 이미지를 이진 이미지로 변환합니다. 임계값 지정 기술에는 여러 유형이 있습니다.
이 방법은 전체 이미지에 대해 고정된 임계값을 설정합니다. 임계값보다 높은 값을 갖는 픽셀은 최대값(255)으로 설정되고, 그 이하는 0으로 설정됩니다. 간단한 임계값 지정에는 cv2.threshold() 함수가 사용됩니다. 강도가 127보다 큰 픽셀은 흰색(255)으로 설정되고, 강도가 127보다 작거나 같은 픽셀은 검은색(0)으로 설정되어 이진 이미지를 생성합니다.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) _, thresholded_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(thresholded_image, cmap='gray') plt.title('Thresholded Image') plt.axis("off") plt.show()
Otsu의 방법은 이미지의 히스토그램을 기반으로 최적의 임계값을 자동으로 결정합니다. 이 방법은 클래스 내 분산을 최소화하고 클래스 간 분산을 최대화합니다. 임계값을 0으로 설정하고 cv2.THRESH_OTSU를 사용하면 함수가 자동으로 최적의 임계값을 계산하여 전경과 배경을 분리합니다.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) _, otsu_thresholded_image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(otsu_thresholded_image, cmap='gray') plt.title("Otsu's Thresholded Image") plt.axis("off") plt.show()
평균 적응형 임계값에서 각 픽셀의 임계값은 해당 픽셀 주변 지역의 픽셀 값 평균을 기반으로 계산됩니다. 이 방법은 이미지의 여러 영역에서 임계값을 동적으로 조정합니다. cv2.adaptiveThreshold() 함수는 로컬 11x11 이웃에 있는 픽셀 값의 평균값을 기반으로 각 픽셀의 임계값을 계산합니다. 임계값을 미세 조정하기 위해 이 평균에서 상수 값 2를 뺍니다. 이 방법은 조명 조건이 다양한 이미지에 효과적입니다.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) mean_adaptive_thresholded_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(mean_adaptive_thresholded_image, cmap='gray') plt.title('Mean Adaptive Thresholded Image') plt.axis("off") plt.show()
가우스 적응형 임계값은 로컬 환경에 있는 픽셀 값의 가우스 가중치 합계를 기반으로 각 픽셀의 임계값을 계산합니다. 이 방법은 조명이 균일하지 않은 경우 더 나은 결과를 제공하는 경우가 많습니다. 가우스 적응형 임계값 지정에서 임계값은 11x11 주변 픽셀 값의 가우스 가중 합계로 결정됩니다. 임계값을 조정하기 위해 이 가중 평균에서 상수 값 2를 뺍니다. 이 방법은 조명과 그림자가 다양한 이미지를 처리하는 데 유용합니다.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) gaussian_adaptive_thresholded_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(gaussian_adaptive_thresholded_image, cmap='gray') plt.title('Gaussian Adaptive Thresholded Image') plt.axis("off") plt.show()
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3