본문 바로가기

Tech82

[OpenCV] 기하학(Geometry) -Rotation, Scaling, Translation, interpolation 기하학(Geometry) 처리 기하학은 점, 선, 면, 도형 등의 기하학적인 대상을 다루는 학문이다. 즉, 대상의 길이, 넓이 각도 등을 측정하거나 공간상의 특성을 연구하는 수학의 한 분야이다 기하학의 영어 단어 'Geometry' 는 토지를 뜻하는 geo와 측량을 뜻하는 metry라는 단어가 합해져서 만들어진 용어이다 영상처리에서 기하학 처리는 영상 내에 있는 기하학적인 대상의 공간적 배치를 변경하는 과정을 말한다. 이것을 화소의 입장에서 보면, 영상을 구성하는 화소들의 공간적 위치를 재배치하는 과정이라고 할 수 있다. 이러한 변화에는 크게 외정, 크기 변경, 평행이동등이 있다. 보통 영상처리 관련 논문에서는 이 세가지 변환을 일커러 RST 변환이라고 말한다. R은 Rotation, S는 Scaling.. 2022. 11. 27.
[OpenCV] 모폴로지 (morphology) 모폴로지(morphology) 모폴로지는 형태학이라는 뜻으로 다양한 학문 분야에서 사용되는 용어이다 영상처리에서는 모폴로지는 영상의 객체들의 형태 (shape)를 분석하고 처리하는 기법이다. 이 형태학적 처리를 활용하여 영상의 경계, 골격, 블록 등의 형태를 표현하는데 필요한 요소를 추출한다. 간단히 말하면, 영상 내에 존재하는 객체의 형태를 조금씩 변형시킴으로써 영상 내에서 불필요한 잡음을 제거하거나 객체를 두드러지게 하여 필요한 요소를 추출한다 침식 연산 (erosion operation) 침식 연산은 객체를 침식시키는 연산이다. 따라서 객체의 크기가 축소되고, 배경은 확장된다 객체의 크기가 축소되기 때문에 영상 내에 존재하는 잡은 같은 작은 크기의 객체들은 사라질 수 있다 이러한 연산을 이용하여 소.. 2022. 11. 25.
[OpenCV] 필터링 (Filtering) 최댓값/최솟값 필터링 입력 영상의 줌심 화소에서 마스크로 씌워진 영역의 입력 화소들을 가져와 계수를 구성하고 그중에서 최댓값과 최솟값을 출력 화소로 결정하는 방법이다. 측, 최댓값 필터링은 게수중에서 최대값을 통과시켜 출력 화소가 되고, 최솟값 필터링은 최솟값을 통과시켜 출력 화소가 된다. import numpy as np, cv2 def minmax_filter(image, ksize, mode): rows, cols = image.shape[:2] dst = np.zeros((rows, cols), np.uint8) center = ksize // 2 # 마스크 절반 크기 for i in range(center, rows - center): # 입력 영상 순회 for j in range(center,.. 2022. 11. 25.
[OpenCV] 에지 검출 로버트(Roberts) 마스크 로버트 마스크는 대각선 반향으로 1과 -1을 배치하여 구성되며, 나머지 원소의 값이 모두 0이어서 다른 1차 미분 마스크에 비해서 계산이 단순하다. 그리고 한 번만 차분을 게산하기 때문에 차분의 크기가 작고, 이로 인해서 경계가 확실한 에지만 추출하며, 잡음에 매우 민감하다 import numpy as np, cv2 # 회선 수행 함수 - 행렬 처리 방식 def filter(image, mask): rows, cols = image.shape[:2] dst = np.zeros((rows, cols), np.float32) # 회선 결과 저장 행렬 xcenter, ycenter = mask.shape[1]//2, mask.shape[0]//2 # 마스크 중심 좌표 for i .. 2022. 11. 25.
[PY] 객체지향 - 상속 (inheritance) OOP에 대한 설명은 상속, 캡슐화, 다양성과 같은 다양한 용어로 설명하고 있으며, 기본적인 설명을 필요하다 상속 함수를 정의하고 여러 곳에서 호출하게 만들면 소스 코드를 복사해서 붙여 넣기 하는 수고들 피할 수 있다. 함수와 마찬가지로 상속 (inheritance)은 클래스에 적용할 수 있는 코드 재사용 기법이다. 즉, 클래스 들을 부모-자식(parent-chlid) 관계로 만들어 자식 클래스가 부모 클래스의 매소드 사본을 상속 받는 방식으로 여러 클래스들에 걸쳐 매소드를 복제하지 않아도 된다. 프로그램에 추가된 상속된 클래스들이 이루는 거미줄처럼 얽힌 관계는 복잡성을 가중시키기 때문에, 상속은 과대평가나 위험하다고 생각하는 프로그래머도 많다. 확실히 상속은 남용할 여지가 많지만 상속 기겁을 제한적으로.. 2022. 11. 24.
[OpenCV] 블러링과 샤프닝 블러링 블러링은 영상에서 화소값이 급격하게 변하는 부분들을 감소시켜 점진적으로 변하게 함으로써 영상에서 전체적으로 부드러운 느낌이 나게 하는 기술이다. 교재에 따라서 스무딩(smoothing)이라 하기도 한다 import numpy as np, cv2 # 회선 수행 함수 - 행렬 처리 방식(속도 면에서 유리) def filter(image, mask): rows, cols = image.shape[:2] dst = np.zeros((rows, cols), np.float32) # 회선 결과 저장 행렬 xcenter, ycenter = mask.shape[1]//2, mask.shape[0]//2 # 마스크 중심 좌표 for i in range(ycenter, rows - ycenter): # 입력 행렬 .. 2022. 11. 24.
[paper] Mask RCNN Mask RCNN - 별도의 FCN을 ConV Feature Map 다음에 연결해 binary mask 생성 - mask prediction 과 Class predicction의 decouple 정확도 향상 - Faster RCNN과 크게 다르지 않는 구조로써 mask branch, FPN, 그리고 RoI Align 추가 - RPN 전에 FPN (Feature pyramid network)가 추가 - image segmenation 의 masking 위해 RoI align이 RoI Pooling을 대신하게 됐다 Abstract Mask RCNN은 개념적으로 Object instance Segmentation 을 위한 단순하고, 유연한 일반적인 frame work이다. 이것은 각각의 인스턴스를 위해서 하나.. 2022. 11. 24.
[PY] 파이썬의 global과 nonlocal 파이썬에서 `global`과 `nonlocal`은 변수의 스코프와 관련된 키워드입니다. 다음은 각각의 사용법을 설명합니다: global 키워드 - global 키워드는 함수 내에서 전역 변수를 사용하고자 할 때 사용 - 함수 내부에서 전역 변수를 사용하려면 `global` 키워드를 사용하여 변수를 전역 변수로 선언하며, 이를 통해 함수 내에서 전역 변수의 값을 읽고 수정할 수 있습니다. - global 키워드는 변수가 함수 외부에서 정의되었음을 나타냅니다. count = 0 def increment(): global count count += 1 print(count) # 출력: 0 increment() print(count) # 출력: 1 count 변수는 함수 외부에서 정의되었으며 함수 내부에서 사용.. 2022. 11. 23.
[OpenCV] 03. 화소처리 (컬러 공간 변환) 컬러 공간 변환 (BGR -> CMY) import numpy as np, cv2 BGR_img = cv2.imread("img/color_model.jpg", cv2.IMREAD_COLOR) # 컬러 영상 읽기 if BGR_img is None: raise Exception("영상 파일 읽기 오류") white = np.array([255, 255, 255], np.uint8) CMY_img = white - BGR_img Cyan, Magenta, Yellow = cv2.split(CMY_img) # 채널 분리 titles = ['BGR_img','CMY_img','Cyan','Magenta','Yellow'] [cv2.imshow(t, eval(t)) for t in titles] cv2.waitK.. 2022. 11. 23.