본문 바로가기

딥러닝(Deep Learning)

오츄(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)으로 값을 근사화하여 표현하는 것입니다. 이것을 컬.. 더보기
cv.setMouseCallback() 사용 시, 매개 변수 flags의 역할 import cv2 as cv import sys img = cv.imread("1.png") if img is None: sys.exit("해당 파일을 찾지 못하였습니다.") BrushSiz = 5 LColor,RColor = (255,0,0),(0,0,255) def painting(event,x,y,flags,param): if event == cv.EVENT_LBUTTONDOWN: cv.circle(img,(x,y),BrushSiz,LColor,-1) elif event == cv.EVENT_RBUTTONDOWN: cv.circle(img,(x,y),BrushSiz,RColor,-1) elif event == cv.EVENT_MOUSEMOVE and flags == cv.EVENT_FLAG_LBU.. 더보기
cv2.resize의 [dsize]와 [fx,fy]의 관계(open-cv) import cv2 # 이미지 불러오기 image = cv2.imread("input_image.jpg", cv2.IMREAD_GRAYSCALE) # 가로x세로 = (1000,1000)이라고 가정 # 이미지의 크기를 반으로 줄이기 resized_image = cv2.resize(image, dsize=(0, 0), fx=0.5, fy=0.5) # 결과 이미지 출력 cv2.imshow("Resized Image", resized_image) cv2.waitKey(0) cv2.destroyAllWindows() 우선 결론을 먼저 말하자면 cv2.resize()를 통해 이미지의 크기를 조절하기 위해서는 dsize와 [fx,fy] 둘 중 하나만 사용해도 된다. dsize=(0,0)으로 설정을 할 경우, 이미지의.. 더보기