목록전체 글 보기 (259)
귀퉁이 서재
이번 포스팅은 이전 포스팅의 후속 편입니다. 이전 포스팅에서는 특징 매칭에 대해 알아봤습니다. 그러나 잘못된 특징 매칭이 너무 많았습니다. 잘못된 특징 매칭은 제외하고 올바른 매칭점을 찾는 작업이 추가로 필요합니다. 이번 포스팅에서는 올바른 매칭점을 찾는 방법에 대해 배워보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/08.match_track 올바른 매칭점 찾기 이전 포스팅에서 match(), knnMatch(), radiusMatch() 함수를 활용하여 매칭점을 찾는 실습을 했습니다. 그러나 잘못된 매칭 결과가 굉장히 많이 포함..
이번 포스팅에서는 특징 매칭에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/08.match_track 특징 매칭(Feature Matching) 특징 매칭이란 서로 다른 두 이미지에서 특징점과 특징 디스크립터들을 비교해서 비슷한 객체끼리 짝짓는 것을 말합니다. OpenCV는 특징 매칭을 위해 아래와 같은 특징 매칭 인터페이스 함수를 제공합니다. matcher = cv2.DescriptorMatcher_create(matcherType): 매칭기 생성자 matcherType: 생성할 구현 클래스의 알고리즘 ("BruteF..
이번 포스팅에서는 특징 디스크립터 검출기에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/08.match_track 이전 포스팅에서 설명했다시피 특징점이란 말 그대로 이미지에서 특징이 되는 부분을 의미합니다. 이미지끼리 서로 매칭이 되는지 확인을 할 때 각 이미지에서의 특징이 되는 부분끼리 비교를 합니다. 즉, 이미지 매칭 시 사용하는 것이 바로 특징점입니다. 특징점은 영어로 키 포인트(Keypoints)라고도 합니다. 특징 디스크립터 이 특징점은 객체의 좌표뿐만 아니라 그 주변 픽셀과의 관계에 대한 정보를 가집니다. 그..
이번 포스팅에서는 이미지의 특징점과 특징점 검출기 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/08.match_track 이전 포스팅에서 다룬 특징 추출과 매칭 방법은 이미지 전체를 전역적으로 반영하는 방법입니다. 전역적으로 반영하기 위해서는 비교하려는 두 이미지 내 물체가 거의 비슷한 모양을 가지고 있어야 합니다. 크기가 다르다거나 회전을 했다거나 방향이 다르면 효과가 없습니다. 이런 경우 이미지를 검출하기 위해서는 이미지의 특징점을 찾아내야 합니다. 이미지 특징점 이미지 특징점이란 말 그대로 이미지에서 특징이 되는 ..
마르쿠스 아우렐리우스는 스토아학파의 대표적인 철학자이자 로마의 제16대 황제였다. 그는 어려서부터 그리스 철학을 좋아했으며 사색하기를 좋아했다고 한다. 그는 황제로서 로마를 통치하던 중 수많은 전쟁을 치러야 했다. 전쟁 상황 속에서 그가 쓴 일지를 모아둔 것이 바로 [명상록]이다. 이 책의 원제는 명상록이 아니라 '자기 자신에게'이다. 책에 '네가', '너는'이라는 말이 자주 등장한다. 이는 자기 계발서처럼 타인을 지칭하는 것이 아니다. 바로 자기 자신을 지칭하는 것이다. 그는 현인이 되기 위해 스스로를 다그치며 끊임없이 사색했다. 로마의 황제로서 모든 권력과 명예를 가졌음에도 철인이 되기 위해 노력 정진을 멈추지 않았다. [명상록]에는 세 가지 단어가 자주 등장하는데, 바로 '공동체의 선', '이성',..
이번 포스팅에서는 이미지 매칭에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/08.match_track 이미지 매칭(Image Matching) 이미지 매칭이란 서로 다른 두 이미지를 비교해서 짝이 맞는 같은 형태의 객체가 있는지 찾아내는 기술을 말합니다. 이미지에서 객체를 찾는 방법은 이미지에서 의미 있는 특징들을 적절한 숫자로 변환하고 그 숫자들을 서로 비교해서 얼마나 비슷한지 판단하는 것입니다. 쉽게 말해 두 이미지 간 유사도를 측정하는 작업입니다. 특징을 대표할 수 있는 숫자를 특징 벡터 혹은 특징 디스크립터라고..
이전 포스팅에서는 외곽 경계를 이용해서 객체 영역을 분할하는 방법에 대해 알아봤습니다. 하지만 실제 이미지에는 노이즈도 많고, 경계선이 명확하지 않아 객체 영역을 정확히 분할하는 것이 힘든 경우도 있습니다. 그래서 연속된 영역을 찾아 분할하는 방법도 필요합니다. 이번 포스팅에서는 연속 영역 분할에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/07.segmentation 거리 변환 (Distatnce Transformation) 이미지에서 물체 영역을 정확히 파악하기 위해서는 물체 영역의 뼈대를 찾아야 합니다. 뼈대를 검..
이번 포스팅에서는 허프 변환에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/07.segmentation 허프 변환 허프 변환을 활용해 이미지에서 직선이나 원과 같은 다양한 모양을 인식할 수 있습니다. 여기서는 직선과 원을 검출하는 함수에 대해 배워보겠습니다. 허프 변환에 대한 이론적인 설명은 opencv 한글문서를 참고해주시기 바랍니다. 혹은 한글 위키피디아도 도움이 됩니다. 허프 선 변환 이미지는 수많은 픽셀로 구성되어 있습니다. 그 픽셀 중 서로 직선 관계를 갖는 픽셀들만 골라내는 것이 허프 선 변환의 핵심입니다. ..
이번 포스팅에서는 영상 분할 방법 중 하나인 컨투어에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/07.segmentation 컨투어(Contour) 컨투어(contour)는 등고선을 의미합니다. 등고선은 지형의 높이가 같은 영역을 하나의 선으로 표시한 것입니다. 영상에서 컨투어를 그리면 모양을 쉽게 인식할 수 있습니다. OpenCV에서 제공하는 컨투어 함수는 다음과 같습니다. dst, contours, hierarchy = cv2.findContours(src, mode, method, contours, hierarc..
이번 포스팅에서는 블러링을 활용한 모자이크 처리와 이미지에 스케치 효과를 적용하는 방법에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/06.filter 블러링을 활용한 모자이크 처리 마우스로 드래그하여 선택한 부분을 블러링 효과로 모자이크 처리를 해보겠습니다. 마우스 드래그 후 엔터를 눌러주면 됩니다. # 블러링을 활용한 모자이크 (workshop_mosaic2.py) import cv2 ksize = 30 # 블러 처리에 사용할 커널 크기 win_title = 'mosaic' # 창 제목 img = cv2.imread..
나는 1인칭 소설을 좋아한다. [호밀밭의 파수꾼], [위대한 개츠비], [상실의 시대], [이방인]과 같이 말이다. [좀머 씨 이야기]의 도입부를 읽었을 때, '이런 분위기의 소설을 읽는 게 얼마만인가?'하며 기뻐했다. 좀머 씨 이야기의 줄거리는 이렇다. 주인공인 소년이 사는 마을에는 좀머 씨라는 신비로운 아저씨가 살고 있었다. 좀머 씨는 지팡이를 짚으며 언제나 길을 걸어 다닌다. 하루에 10시간 이상, 말 그대로 깨어있는 시간에는 항상 이리저리 걸어 다닌다. 주인공인 소년을 포함해서 마을 사람들은 좀머 씨의 정체가 무엇인지, 왜 그렇게 걸어 다니는지 알지도 못했고 관심도 없었다. 주인공은 좀머 씨를 총 3번 봤다. 처음으로 좀머 씨를 본 때는 비가 억수같이 내리던 날이었다. 아버지와 함께 차를 타고 집..
본 글은 YOLO 논문 전체를 번역 및 설명해놓은 글입니다. 크게 중요하지 않은 부분을 제외하고는 대부분의 글을 번역했고 필요하다면 부가적인 설명도 추가했습니다. 내용이 긴 섹션 끝에는 요약도 추가했습니다. 번역이 이상하다거나 틀린 내용이 있다면 피드백 부탁드립니다. Abstract YOLO 연구진은 객체 검출(object detection)에 새로운 접근방식을 적용했습니다. 기존의 multi-task 문제를 하나의 회귀(regression) 문제로 재정의했습니다. YOLO는 이미지 전체에 대해서 하나의 신경망(a single neural network)이 한 번의 계산만으로 bounding box와 클래스 확률(class probability)을 예측합니다. -> bounding box란 객체의 위치를..
이번 포스팅에서는 이미지 피라미드에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/06.filter 이미지 피라미드(image pyramid)란 이미지의 크기를 피라미드처럼 단계적으로 확대하거나 축소하는 작업을 말합니다. 가우시안 피라미드 가우시안 필터를 적용한 뒤 이미지 피라미드를 구성하는 것을 가우시안 피라미드(gaussian pyramid)라고 합니다. OpenCV에서는 아래와 같은 가우시안 피라미드 함수를 제공합니다. dst = cv2.pyrDown(src, dst, dstsize, borderType) dst =..
이번 포스팅에서는 모폴로지라는 개념에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/06.filter 모폴로지(morphology)란 '형태학'이라는 뜻입니다. 이는 영상 분야에서 노이즈 제거, 구멍 채우기, 끊어진 선 이어 붙이기 등에 쓰이는 형태학적 연산을 말합니다. 모폴로지 연산은 검은색과 흰색으로만 구성되어 있는 바이너리(binary) 이미지에 적용할 수 있습니다. 모폴로지 연산으로는 침식, 팽창, 열림, 닫힘이 있는데 이에 대해 차례대로 배워보겠습니다. 침식 연산 침식(erosion)이란 말 그대로 형태를 깎아 ..
이번 포스팅부터는 경계를 검출하는 방법에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/06.filter 지금까지는 영상을 흐릿하게 하는 블러링에 대해 알아봤습니다. 이번 포스팅에서는 반대로 영상의 경계를 뚜렷하게 만드는 방법에 대해 알아보겠습니다. 영상의 경계를 선명하고 뚜렷하게 만드는 작업을 샤프닝(sharpening)이라고 합니다. 샤프닝은 영상에서 경계를 검출하여 경계에 있는 픽셀을 강조합니다. 기본 미분 필터 경계(엣지)를 검출하기 위해서는 픽셀 값이 급격하게 변하는 지점을 찾아야 합니다. 경계 부분에서는 당연히..
구운몽은 17세기 김만중이 어머니를 위로하기 위해 쓴 소설이다. 김만중의 아버지는 병자호란 때 자결했다. 당시 임신 중이었던 부인 윤씨는 같이 자결하지 못하고 피난을 갔는데 피난 가던 중 배에서 아이를 낳았다. 그 아이가 바로 김만중이었다. 어머니 윤씨는 난 중에 아이를 낳았고 아버지 없이 두 아들을 홀로 키웠다. 윤씨는 두 아들을 입신양명시키기 위해 교육에 힘을 썼다고 한다. 그녀의 교육 덕분에 김만중은 당대 최고의 지성인만 역임할 수 있다는 홍문관 대제학을 지냈고, 병조판서도 역임했다. 하지만 당시는 서인과 남인 간의 당파 싸움이 한창이었다. 결국 김만중은 장희빈의 세력에 반발해 유배를 가게 되었다. 당시 김만중의 나이 51세였다. 당파 싸움으로 인해 큰 아들은 저승길로 보내고, 작은 아들은 유배길을..
이번 포스팅부터는 영상 필터에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/06.filter 시작하기 앞서 용어에 대해 먼저 정의하고 가겠습니다. 영상 처리는 새로운 영상을 얻기 위해 기존 픽셀 값에 어떤 연산을 가해서 새로운 픽셀 값을 얻는 작업입니다. 새로운 픽셀 값을 얻을 때 하나의 픽셀 값이 아닌 그 주변 픽셀들의 값을 활용하는 방법을 공간 영역 필터링(spacial domain filtering)라고 합니다. 또한, 블러링(Blurring)이란 기존의 영상을 흐릿하게 만드는 작업을 뜻합니다. 필터(Filter)..
이번 포스팅에서는 지금까지 배웠던 내용을 기반으로 실습을 해보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/05.geometric_transform 실습 1: 모자이크 처리 이미지의 특정 영역을 마우스로 클릭하면 모자이크 처리가 되게 하는 실습을 해보겠습니다. 모자이크 처리의 원리는 간단합니다. 모자이크를 적용할 관심 영역의 이미지를 특정 비율로 축소시킨 뒤 다시 확대를 하면 됩니다. 크기가 작은 이미지를 최대 픽셀 값 이상의 크기로 확대하면 이미지가 깨집니다. 이 원리를 적용한 것입니다. 관심 영역을 축소했다가 다시 확대하면 원래..
이번 포스팅에서는 렌즈를 왜곡하는 방법에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/05.geometric_transform 렌즈 왜곡(Lens Distortion) 지금까지 이미지 이동(Translation), 확대/축소(Scaling), 회전(Rotation), 어핀 변환(Affine Transformation), 원근 변환(Perspective Transformation)에 대해 배웠습니다. 이는 모두 변환 행렬을 이용해서 구할 수 있습니다. 하지만 변환 행렬로는 구할 수 없는 모양의 변환도 있습니다. 렌즈 왜곡..
이번 포스팅에서는 이미지를 뒤트는 방법에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/05.geometric_transform 이전 포스팅에서는 이미지를 이동, 확대/축소, 회전하는 방법에 대해서 알아봤습니다. 이동, 확대/축소, 회전을 한 후에는 이미지의 모양이 그대로 유지되지만, 이번 포스팅에서 배울 이미지 뒤틀기(wraping)를 하면 기존 모양과 달라집니다. 이미지 뒤틀기에는 크게 두 가지가 있는데 어핀 변환과 원근 변환이 있습니다. 어핀 변환(Affine Transform) 어핀 변환은 뒤틀기 방법 중 하나입니..