본문 바로가기

분류 전체보기

Snake Curve(Feat. internal Energy, image Energy) 다음은 스네이크 물체 분할 알고리즘의 기본적인 동작 과정입니다: 초기화 단계: 이미지나 프레임에서 시작점으로 사용될 일련의 점을 정의합니다. 이 점들은 스네이크의 초기 형태를 결정하는 데 사용됩니다. 에너지 함수 정의: 스네이크의 형태를 조절하고 움직이는 데 사용되는 에너지 함수를 정의합니다. 이 함수에는 두 가지 주요 요소가 포함됩니다. 내부 에너지(Internal Energy): 스네이크의 형태를 제어하고 유지하기 위한 내부적인 에너지로, 스네이크의 길이나 곡률을 고려합니다. 외부 에너지(External Energy): 스네이크가 분할하려는 물체의 경계를 찾기 위한 외부적인 에너지로, 이미지의 밝기, 경계선 등과 같은 속성을 활용합니다. 에너지 최소화: 에너지 함수를 최소화하는 방향으로 스네이크를 조.. 더보기
SLIC(Simple Linear Iterative Clustering)(Feat. Super Pixel)의 동작 과정 1. 이니셜라이제이션(Initialization): 이미지를 3x3 그리드로 나누고, 각 그리드 셀의 중심에 초기 슈퍼픽셀을 배치합니다. 2. 클러스터링(Clustering): 픽셀 A의 색상이 (50, 30, 10)이고, 이 픽셀이 위치한 공간 좌표가 (10, 10)이라고 합시다. 각 슈퍼픽셀의 중심과의 색상 거리와 공간적 거리를 계산합니다. 예를 들어, 슈퍼픽셀 1의 중심 색상이 (40, 25, 5)이고 위치가 (5, 5)이라면, 색상 거리와 공간적 거리를 계산합니다. 이때 색상 거리는 (50-40)^2 + (30-25)^2 + (10-5)^2와 같이 계산됩니다. 공간적 거리는 (10-5)^2 + (10-5)^2와 같이 계산됩니다. 이 두 거리를 합친 총 거리를 계산하고, 가장 거리가 짧은 슈퍼픽셀에.. 더보기
k-mean Clustering(feat. 군집화) 군집화(Clustering) : 통계 분석 기법 준 하나로써, 데이터를 유사한 특성을 가진 그룹 또는 군집으로 나누는 기술입니다. k의 개수 : Cluster의 개수 Centroid : 각 군집에 포함된 데이터의 중앙값(k-mean clustering에서는 평균을 이용) 맨 처음에는 [랜덤]으로 Centroid값을 정한다. 이 예시에서는 k=2개의 예시이다. 랜덤하게 2개의 Centroid가 정해지면, Centroid를 제외한 모든 좌표에 대한 Distance를 계산을 한다. Distance Matrix를 기준으로 각 Sample(Instance)는 어느 Centroid에 더 가까운지를 판단하여 만약 Centroid1에 더 가까우 면 해당 데이터는 Centroid1과 같은 Cluster가 된다. 위 예제.. 더보기
RANSAC(Randon Sample Consensus) 예시 코드 import numpy as np import matplotlib.pyplot as plt def generate_data(num_points=100, outlier_ratio=0.2, seed=42): np.random.seed(seed) x = np.random.rand(num_points) * 10 y = 2 * x + 1 + np.random.randn(num_points) # Add outliers num_outliers = int(outlier_ratio * num_points) outliers_index = np.random.choice(num_points, num_outliers, replace=False) y[outliers_index] += 10 * np.random.randn(num_.. 더보기
허프 변환(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.CHAIN_APPROX_NONE, CHAIN_APPROX_SIMPLE(Feat. findContours() ) cv.CHAIN_APPROX_NONE 등고선(Edge)을 표현할 때 근사화를 하지 않고, 모든 좌표를 포함하여 표현하는 방법입니다. 이 방법을 사용하면 등고선 상의 모든 픽셀 좌표가 유지되며, 등고선(Edge)이 구성되는 모든 픽셀이 포함됩니다. 1로 표시된 모든 좌표를 반환을 한다. cv.CHAIN_APPROX_SIMPLE 등고선(Edge)의 일부 중요한 포인트만을 선택하여 표현하게 되어 메모리 사용을 줄이고 계산 효율성을 높입니다. 예를 들어, 이 등고선(Edge)을 근사화하여 표현하는 좌표 리스트는 [(0,0), (3,3), (3,1), (3,3)]와 같이 등고선을 대표하는 중요한 포인트만을 포함하고 있게 됩니다. (정사각형의 네 개의 꼭지점의 좌표만이 반환된다) https://bkshin.tist.. 더보기
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 등을 사용한다면, 등고선 간의 부모-자식 관계가 나타날 것이며, 내부의 사각형이 바깥쪽 테두리를 포함한다는 관계가 표현됩니다. (이때, 내부 사각형이 부모이고, 바깥쪽 사각형이 자식이 된다) .. 더보기