본문 바로가기

딥러닝(Deep Learning)/컴퓨터 비전

허프 변환(Hough Transformation)(Feat. 컴퓨터 비전과 딥러닝 p131) p129처럼 Edge Pixel들이 서로 이웃하지 않고, p131의 그림처럼 서로 이웃하지 않고, 끊겨져 있는 Edge Pixel에 대한 Edge 검출의 가장 기본적인 아이디어는 허프 변환(Hough Transformation)을 통하여 끊겨진 Edge Pixel을 잇는 직선을 만드는 것이다.(Hough Transformation은 직선 뿐 아니라, 어떤 도형으로도 Edge를 검출하게 할 수가 있다. p132참조) 구체적으로 설명을 하면, Edge Map이 만들어 지고 잘 살펴보니, 아래 3개의 문제점이 있었다. 1] 물체를 구성하는 Edge 픽셀이 자잘하게 끊겨져 있었고, 2] 그것들을 완벽하게 잇는 직선이 존재하지가 않았다. 3] y=a*x+b로 하여, Edge 직선을 검출하기에는 기울기(a)와 절편.. 더보기
cv2.findContours() (Feat. 컴퓨터 비전과 딥러닝, P129) 우선 cv2.findContours()의 반환형 중 하나인 contour의 내부 정보에 대한 분석을 먼저 해보자! contour.shape contours 객체는 등고선 좌표를 담고 있는 리스트입니다. 각 등고선은 각각의 좌표들을 포함하는 리스트로 표현됩니다. contours.shape 속성의 첫 번째 값(contours.shape[0])은 등고선의 개수이고, 두 번째 값(countours.shape[1])은 각 등고선에 포함된 좌표의 수 세 번째 값(contours.shape[2])은 좌표가 차원 정보이다. 이 코드에서 contours.shape는 (n, m, 2) 형태의 튜플이다.( 맨 마지막의 2는 contour를 이루는 좌표가 2차원 좌표라는 뜻) 예를 들어, 만약 contours에 두 개의 등고.. 더보기
cv.RETR_LIST(Feat. 컴퓨터 비전과 딥러닝 P128) cv.findContours(img,cv.RETR_LIST, ~~) 함수의 두 번재 인자( cv.RETR_LIST ,cv.RETR_EXTERNAL, cv.RETR_CCOMP, cv.RETR_TREE 등 )는 구멍이 있는 경우 바깥쪽 경계선과 그 안에 있는 구멍의 경계선을 계층적으로 찾는 방식을 지정 하는 것이다. 경계선(Contour)를 찾는 방법이란 구체적으로 바깥 경계선과 내부 경계선 간의 부모-자식 관계를 만들 것인가 안 만들 것인 가로 생각해 볼 수가 있다. 만약 계층 구조를 구축하는 cv.RETR_TREE 등을 사용한다면, 등고선 간의 부모-자식 관계가 나타날 것이며, 내부의 사각형이 바깥쪽 테두리를 포함한다는 관계가 표현됩니다. (이때, 내부 사각형이 부모이고, 바깥쪽 사각형이 자식이 된다) .. 더보기
캐니 에지(Canny Edge)(feat. false positive) (컴퓨터 비전과 딥러닝 p 126 부분에 해당) Canny Edge는 지금도 가장 체계적인 에지 검출 이론이라고 인정 받는 알고리즘이다. 캐니 알고리즘은 거짓 긍정(falst positive)를 줄이기 위해 아래와 같은 과정을 거쳐서 에지의 정확도를 높인다. [엣지 추적]을 좀 더 구체적인 예시로 설명하겠습니다. 아래에 간단한 3x3 이미지 행렬을 사용하여 엣지 추적 과정을 설명하겠습니다. 이미지 행렬: [ 50, 100, 150 ] [ 120, 200, 80 ] [ 30, 70, 120 ] 1.그레디언트 계산: 이미지의 각 픽셀에 대한 그레디언트(기울기)를 계산합니다. 가로 방향과 세로 방향의 그레디언트를 계산합니다. 예를 들어, 중앙 픽셀(200)의 가로 그레디언트는 (80 - 120) = -40이고.. 더보기
물체 인식(Object Recongnition) vs 의미 분할(Semantic Segmentation) 1.물체 인식(Object Recognition): 목적: 이미지에서 어떤 물체가 있는지 식별. 작업: 이미지 전체에서 물체의 위치와 클래스를 찾음. 결과: "이 이미지에는 개가 있습니다." 2.의미 분할(Semantic Segmentation): 목적: 이미지를 픽셀 수준에서 세분화하여 각 픽셀에 레이블을 할당하여 의미 있는 영역을 식별. 작업: 이미지 내에서 각 픽셀이 어떤 클래스에 속하는지 식별. 결과: 이미지에서 개의 위치를 정확하게 식별하고, 각 픽셀에 해당하는 레이블을 할당하여 개가 있는 부분을 세분화. 예를 들어, 이미지에서 개의 몸통, 귀, 꼬리 등이 어디에 있는지 구분. 예를 들어, 아래와 같은 이미지가 있다고 가정해봅시다. 물체 인식 결과: "이 이미지에는 개가 있습니다." 의미 분할 .. 더보기
png 파일과 jpg(jpeg) 파일의 차이점(feat. Alpha 채널) PNG 파일은 투명도(알파 채널)를 지원하기 위해 4개의 채널(RGBA)을 사용합니다. 각각의 채널은 이미지의 색상 정보를 나타냅니다. 빨강 채널 (Red): 이미지에서 빨강색을 나타냅니다. 초록 채널 (Green): 이미지에서 초록색을 나타냅니다. 파랑 채널 (Blue): 이미지에서 파란색을 나타냅니다. 알파 채널 (Alpha): 이 채널은 각 픽셀의 투명도를 나타냅니다. 0은 완전한 투명을, 255는 완전한 불투명을 나타냅니다. 이 알파 채널을 사용하면 이미지에서 일부 영역을 투명하게 처리할 수 있습니다. 투명도를 지원하는 것은 PNG 파일이 배경이 없는 이미지나 이미지의 특정 부분을 다른 이미지와 결합할 때 유용합니다. 예를 들어, 로고 이미지를 PNG로 저장하면 배경이 투명한 로고를 얻을 수 있습.. 더보기
오츄(Otsu) 알고리즘(feat. 최적화 문제로 임계치를 결정한 뒤 이진 영상화) 본격적인 설명을 하기 앞서, 아래의 모분산의 공식을 이해하고 있어야 한다. 오츄(Otsu) 알고리즘은 이미지 이진화(binarization)를 수행하기 위한 알고리즘 중 하나로, 이미지의 히스토그램을 분석하 여 최적의 임계값을 찾아내는 데 사용됩니다. 아래에 오츄 알고리즘을 예시를 들어 구체적이고 쉽게 설명하겠습니다. 단계 1: 히스토그램 생성 이미지를 흑백으로 변환(명암 영상으로 변환)하고, 픽셀 값의 히스토그램을 생성합니다. 히스토그램은 픽셀 값의 빈도를 나타냅니다. 단계 2: 클래스 간 분산 계산 각각의 가능한 임계값마다 클래스 간 분산(between-class variance)을 계산합니다. 클래스 간 분산은 두 클래스(흑색과 백색으로 구분되는 경우) 간의 분산 정도를 나타내며, 값이 클수록 두 .. 더보기
Color Quantization(feat.양자화) 양자화를 간단한 예시로 설명해 보겠습니다. 0부터 100까지의 숫자 중에서 하나를 선택해서 어떤 물건의 무게를 나타내려고 한다고 해봅시다. 예를 들어, 그 물건의 실제 무게는 72이지만, 우리는 0, 1, 2, ..., 100까지의 정수 중에서만 선택할 수 있습니다. 여기서 0은 아무 무게도 없는 상태(빈 손), 100은 최대한 무거운 상태를 나타낼 것입니다. 그런데 여러분이 선택할 수 있는 숫자가 0부터 100까지 밖에 없기 때문에 정확한 무게를 표현하기가 어려울 것입니다. 예를 들어, 만약 실제 무게가 72.3이라면, 우리는 72나 73 중에서만 선택할 수 있을 것입니다. 이것이 양자화의 아이디어입니다. 연속적인 값에서 특정한 간격(ex. 0~255)으로 값을 근사화하여 표현하는 것입니다. 이것을 컬.. 더보기