-
확대 & 축소 : 이미지 피라미드(Image Pyramid)카테고리 없음 2023. 12. 11. 01:11
이미지 피라미드 (Image Pyramid)
알고리즘에서 요구하는 해상도가 있다면, 입력 이미지의 크기를 변경하여 영상 처리를 진행 하기 위해 이미지 피라미드 를 활용 한다.
이미지 피라미드의 의미는 이미지의 크기를 확대 하거나 축소했을 때 이미지들의 형태가 피라미드와 같이 표현 된다.
원본 이미지에서 크기를 확대하는 것을 업 샘플링 이라 하며 하위 단계의 이미지를 생성하게 된다.
원본 이미지에서 크기를 축소하는 것을 다운 샘플링 이라 하며 상위 단계의 이미지를 생성하게 된다
이미지 피라미드로는 가우시안 피라미드와 라플라시안 피라미드가 있다.
가우시안 피라미드
가우시안 피라미드는 이미지를 스무딩(평활화)과 다운샘플링(해상도를 줄이는 것)을 통해 다양한 해상도로 나타냅니다.
가우시안 피라미드를 만들기 위해, 먼저 원본 이미지를 스무딩하여 이미지를 부드럽게 만듭니다. 이것은 이미지의 고주파 노이즈를 감소시키는 역할을 합니다. 그런 다음 이미지를 다운샘플링하여 해상도를 줄입니다. 다운샘플링은 이미지의 크기를 줄이는데, 일반적으로 이미지를 절반으로 줄이는 것입니다. 이 과정을 반복하여 이미지를 저해상도에서 고해상도까지 다양한 수준으로 나타낼 수 있습니다.라플라시안 피라미드
라플라시안 피라미드는 이미지 처리에서 가우시안 피라미드의 역방향인 것으로, 이미지의 세부 정보를 강조하는데 사용됩니다. 가우시안 피라미드는 이미지를 다양한 해상도로 표현하는데 반해, 라플라시안 피라미드는 이미지의 세부적인 정보를 재구성합니다.
라플라시안 피라미드는 보통 가우시안 피라미드의 각 수준에서 원본 이미지를 재구성한 것과 각각의 가우시안 피라미드 이미지를 업샘플링한 후 차이를 계산하여 생성됩니다.메인 코드
import cv2 src = cv2.imread("F:\dev\opencv\image\cat.jpg", cv2.IMREAD_COLOR) height, width, channel = src.shape dst = cv2.pyrUp(src, dstsize=(width * 2, height * 2), borderType=cv2.BORDER_DEFAULT) dst2 = cv2.pyrDown(src) cv2.imshow("src", src) cv2.imshow("dst", dst) cv2.imshow("dst2", dst2) cv2.waitKey() cv2.destroyAllWindows()
핵심 코드
dst = cv2.pyrUp(src, dstsize=(width * 2, height * 2), borderType=cv2.BORDER_DEFAULT) dst2 = cv2.pyrDown(src)
'dst = cv2.pyrUp(src, dstSize, borderType) '
- `src`: 입력 이미지를 나타냅니다.
- `dstsize`: 업샘플링된 이미지의 크기를 지정합니다.`width * 2`와 `height * 2`는 가로 및 세로 차원을 2배씩 증가시키는 것을 의미합니다.
- `borderType=cv2.BORDER_DEFAULT`: 이미지 경계 처리 방법을 나타냅니다. 이 경우, 기본적인 이미지 테두리 처리 방식을 사용합니다.
다운 스케일링 함수 'dst = cv2.pyrDown(src, dstSize, borderType)'
- `src`: 입력 이미지를 나타냅니다.
- `cv2.pyrDown` 함수는 입력 이미지를 다운샘플링하여 이미지의 해상도를 줄이는 데 사용됩니다. 이를 통해 이미지의 크기를 줄이고, 더 낮은 해상도로 변환하여 이미지를 부드럽게 만들 수 있습니다.출력 결과
코드 참조 : https://github.com/CBike/opencv/blob/master/image%20Prymid.py