WPF OpenCV 프로젝트 #24: Perspective Transform (원근 변환) 구현

Perspective Transform

Perspective Tranform (원근 변환)에 대해 알아보고 WPF OpenCV 프로젝트에 추가하도록 하겠습니다.지난 포스팅(#23)에서는 Affine Transform (어핀 변환)을 통해 이미지를 평행 하게 찌그러뜨리는 법을 배웠습니다. 어핀 변환의 핵심은 “평행한 선은 영원히 평행하다” 라고 했었던 것 기억하죠? 하지만 현실 세계는 다릅니다. 기찻길을 생각해보세요. 분명히 두 레일은 평행 하지만, 멀리 볼수록 한 점(소실점)에서 만나는 것처럼 보입니다. 이것이 바로 Perspective … 더 읽기

WPF OpenCV 프로젝트 #22: Geometric Transform (이동, 회전, 확대/축소)

Geometric Transform Image

Geometric Transform(기하학적 변환)에서 이미지의 이동과 회전, 확대/축소에 대해 정리하고, WPF OpenCV 프로젝트에 구현하도록 하겠습니다. 지난 포스팅(#21)에서는 히스토그램 버그를 잡느라 잠시 쉬어갔었죠? 오늘은 드디어 잠시 미뤄뒀던 Geometric Transform(기하학적 변환)을 구현해 볼 차례입니다. 그동안 우리는 픽셀의 ‘색상’이나 ‘밝기’를 바꾸는 작업(히스토그램, 정규화 등)을 주로 했습니다. 하지만 오늘 할 작업은 픽셀의 ‘위치’를 바꾸는 작업입니다. 이미지를 옮기고(Translation), 돌리고(Rotation), 크기를 조절하는(Scaling) … 더 읽기

WPF OpenCV 프로젝트 #20: CLAHE (Contrast Limiting Adaptive Histogram Equalization)

WPF OpenCV - CLAE

CLAHE 알고리즘을 WPF OpenCV 프로젝트에 구현하겠습니다. 지난 포스팅(#19)에서는 히스토그램 평활화(Equalize)를 통해 영상의 명암비를 전체적으로 높이는 방법을 다뤘습니다. 확실히 이미지가 밝아지고 선명해지긴 했지만, 혹시 뭔가 “과하다”는 느낌 못 받으셨나요? 너무 어두운 배경에 있던 노이즈(Noise)까지 덩달아 선명해지거나, 밝은 부분이 하얗게 날아가 버리는 현상 말이죠. 오늘은 바로 그 문제를 해결해 주는 ‘업그레이드된 평활화’, CLAHE (Contrast Limiting Adaptive Histogram … 더 읽기

WPF OpenCV 프로젝트 #19: Equalize (히스토그램 평탄화) 구현

OpenCV Equalize 적용 이미지

Equalize (히스토그램 평탄화)와 관련하여 WPF OpenCV 프로젝트 추가해 보도록 하겠습니다. 지난 포스팅(#18)에서는 Normalize (정규화)를 통해 좁은 범위에 몰려 있는 픽셀들을 0~255 전체 구간으로 쫙 펴주는(Stretch) 작업을 했습니다. 하지만 정규화만으로는 해결되지 않는 ‘진짜 골 때리는 애들’ 이 있습니다. 바로 픽셀 값들이 한 곳에 극단적으로 뭉쳐 있는 경우입니다. 이럴 때 필요한 것이 바로 오늘 다룰 Histogram Equalization … 더 읽기

WPF OpenCV 프로젝트 #15: Otsu Threshold (오츠 알고리즘) 구현

Otsu Threshold

Otsu Thresold (오츠 알고리즘)을 WPF OpenCV 프로젝트에 구현하도록 하겠습니다. 앞선 포스팅들에서 길었다 생각하면 길 수 있는 UI의 터널을 지나왔습니다. ROI(관심 영역)를 자르고(Crop), 저장하고, 그 위에 도형을 그리고… 별로 한건 없는 것 같은데 몇 가지 기능들을 구현했죠. (1편부터 14편까지 대부분을 UI(View)만 붙들고 있었으니 지칠 만도 합니다.) 사실 UI 기능을 더 욕심내자면 끝도 없겠지만, 애초에 이 프로젝트를 … 더 읽기

WPF OpenCV 프로젝트 #14: Bug 수정 (Zoom 측정 시 ROI 좌표 틀어짐 해결) 및 Line Distance (직선 거리 측정) 구현

Bug 수정 (Zoom 측정 시 ROI 좌표 틀어짐 해결) 및 직선 거리 측정을 WPF OpenCV 프로젝트에 구현하겠습니다. 지난 13편까지 우리는 도형 그리기에 ROI 설정까지 정말 많은 기능을 숨 가쁘게 구현해 왔습니다. 그런데 혹시… 뭔가 이상한 점 못 느끼셨나요? (12편부터 계속되던 문제였는데 말이죠.) ROI 사각형을 예쁘게 그려 놓고, 마우스 휠을 돌려 이미지를 확대/축소(Zoom In/Out) 했을 때, … 더 읽기

WPF OpenCV 프로젝트 #12: ROI(관심 영역) 크기 조절 및 이동 기능 구현 (Interaction)

이번 포스팅에서는 ROI(관심 영역) 크기 조절 및 이동 기능 구현(Interaction)을 WPF OpenCV 프로젝트에 구현하겠습니다. 지난 포스팅(#11)에서 ROI 사각형 주변에 8개의 크기 조절 핸들(Picker)을 예쁘게 배치했습니다. 하지만 아직은 핸들을 잡고 흔들어도 아무 반응이 없었죠? (그림의 떡이었죠.) 오늘은 드디어 이 Picker 핸들에 생명을 불어넣어 ROI 크기를 늘리고 줄이는 기능, 그리고 잘못 그린 ROI를 통째로 이동 시키는 기능을 … 더 읽기

WPF OpenCV 프로젝트 #11: ROI 이미지 저장 및 크기 조절 핸들(Resize Handle) UI 구현

WPF ROI Resize Handle 실행 화면

ROI 이미지 저장 및 ROI 영역 사각형의 크기 조절 핸들(Resize Handle)을 WPF OpenCV 프로젝트에 구현하도록 하겠습니다.지난 포스팅(#10)에서 ROI(관심 영역)를 자르는 기능까지 구현했는데, 글을 올리고 나서 보니 “저장하기“를 빼 먹었더군요. (가끔은 중요한 걸 깜빡하곤 하죠? 저만 그런 거 아니죠?) 그래서 오늘은 1. ROI 이미지 저장 기능을 마무리하고, 사용하다 보니 너무 불편했던 2. ROI 영역 수정(크기 조절) … 더 읽기

WPF OpenCV 프로젝트 #10: ROI(관심 영역) 자르기 및 저장 구현

이번에는 ROI(관심 영역) 자르기와 저장 기능을 WPF OpenCV 프로젝트에 구현해 보죠.지난 포스팅에서 OverlayCanvas를 이용해 ROI를 그릴 UI 뼈대를 만들었습니다. 이제 그 뼈대에 살을 붙여 실제로 작동하는 코드를 만들 차례입니다.오늘은 작업량이 좀 있습니다. 특히 마지막 좌표 계산 부분은 중요하니 끝까지 잘 따라와 주세요! Model: OpenCVService에 자르기 기능 추가 영상 처리에서 관심 영역을 잘라내는 것을 **크롭(Crop)**이라고 하죠? … 더 읽기

WPF OpenCV 프로젝트 #9: ROI(관심 영역) 설정을 위한 UI 구성 (OverlayCanvas)

ROI(관심 영역) 설정을 위한 UI 구성(OverlayCanvas)을 WPF OpenCV 프로젝트에서 다루겠습니다. 지난 포스팅에서 우리는 이미지를 불러와 확대/축소(Zoom)하고, 휠 버튼으로 이동(Panning)하는 기능까지 구현했습니다. 이제 영상 처리의 핵심이라 할 수 있는 관심 영역(ROI, Region of Interest) 기능을 구현해 볼 차례입니다. 전체 이미지를 통째로 처리하는 경우도 있지만, 현업에서는 특정 부분만 잘라내서 검사하거나, 모델을 등록하는 경우가 훨씬 빈번하니까요. 아무튼 ROI … 더 읽기