WPF OpenCV 프로젝트 #26: Lens Distortion – Barrel & Pincushion

Lens Distortion (볼록 왜곡 효과)

Barrel Distortion 과 Pincushion Distortion 을 이번 WPF OpenCV 프로젝트에서 구현하겠습니다. 지난 포스팅(#25)에서는 Cv2.Remap을 이용해 물결처럼 일렁이는 효과(Wave Effect)를 구현했습니다. Sin, Cos 함수로 픽셀을 흔들어주니 재미있는 결과가 나왔었죠?그리고, Lens Distortion 의 내용을 정리 하면서 Barrel Distortion(볼록 왜곡)과 Pincushion Distortion(오목 왜곡)을 짧게 정리 하긴 했었는데, 이것을 프로젝트에 구현하진 않았습니다. Remap() 함수를 통해 이미지를 X방향과 Y 방향으로 … 더 읽기

WPF OpenCV 프로젝트 #25: Lens Distortion (렌즈 왜곡) 효과 (Remap & Wave Effect)

Lens Distortion (Wave Effect)

Remap (픽셀 재배치)을 이용한 Wave Effect를 이번 WPF OpenCV 프로젝트에 정리하고 추가/구현 하도록 하겠습니다. 지난 포스팅(#24)에서는 원근 변환(Perspective Transform)을 통해 찌그러진 문서를 펴는 마법을 부렸습니다. 기억나시죠? 그동안 다뤘던 이동, 회전, 어핀, 원근 변환의 공통점이 있습니다. 바로 행렬(Matrix) 하나로 모든 것이 해결되는 ‘선형 변환‘이라는 점입니다. 즉, 직선은 변환 후에도 여전히 직선으로 남아있었습니다. 하지만 현실 세계는 그렇게 … 더 읽기

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

Perspective Transform

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

WPF OpenCV 프로젝트 #23: Affine Transform (어핀 변환)

Affine Transform

Affine Transform (어핀 변환)대한 내용을 간략히 정리하고 WPF OpenCV 프로젝트에 추가하도록 하겠습니다. 지난 포스팅(#22)에서는 이미지의 이동, 회전, 확대/축소 같은 기본적인 Geometric Transform(기하학적 변환)을 다뤘습니다. 기억하시죠? 오늘은 Geometric Transform 에서 조금 더 나아가 Affine Transform (어핀 변환)에 대해 알아보고 구현해 보겠습니다. 이미지를 단순히 돌리고 키우는 것을 넘어, 이미지를 ‘찌그러뜨리거나 뒤틀어 버리는(Warping)’ 재미있는 작업입니다. 하지만 “직선의 평행성은 … 더 읽기

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

Geometric Transform Image

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

WPF OpenCV 프로젝트 #21: Improve Histogram Bug (히스토그램 버그 개선)

Histogram Bug

Histogram Bug 를 이번 글에서는 개선하여 WPF OpenCV 프로젝트를 업데이트 하겠습니다. 지난 포스팅(#20) 마지막에 제가 이렇게 글을 쓰고 마무리했었죠. “다음에는 영상의 기하학적 변환(이동, 회전, 확대/축소)을 다루겠습니다!” 라구요. 하지만… 제가 포스팅 된 내용을 읽고 계신 분들께 알리지 않고 은근슬쩍 모른 척 넘어가려던 버그가 하나 있었습니다. 댓글이 없어서 ‘아무도 모르거나, 알아서들 고쳤으리라~’ 하고 묻어두려 했지만, 다음 글을 … 더 읽기

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 프로젝트 #18: Normalize (정규화)

Nomalize Histogram Graph

Normalize (정규화) 처리를 WPF OpenCV 프로젝트에 구현하도록 하겠습니다. 지난 포스팅(#17)에서는 영상의 밝기 분포를 확인하는 히스토그램(Histogram)을 구현했습니다. 히스토그램을 통해 “아, 이 사진은 픽셀들이 너무 어두운 곳에만 몰려있네?” “어라 ! 이 사진은 픽셀들이 너무 밝은 곳에만 몰려있네? “라는 걸 알았다면, 이제는 그걸 수정할 차례입니다. 바로 Normalize (정규화) 기능을 통해서 말이죠. 이번에는 정규화 라는 녀석의 개념을 제가 가능하다면 … 더 읽기

WPF OpenCV 프로젝트 #17: Histogram (히스토그램) 분석 및 그래프 그리기 (Cv2.CalcHist)

Histogram Graph

영상에서 Histogram (히스토그램) 분석 및 Histogram 데이터를 이용하여 그래프를 그려 분석 할 수 있도록 WPF OpenCV 프로젝트에 구현하겠습니다. 지난 포스팅(#15, #16)에서 Otsu와 Adaptive Threshold를 다루면서 “히스토그램(Histogram)”이라는 단어를 스치듯 언급했었습니다. 기억나시나요? “히스토그램에서 두 개의 산봉우리(Bimodal)가 생길 때, Otsu 알고리즘은 그 사이 골짜기를 찾아냅니다.” (Post #15 참조) 오늘은 바로 그 히스토그램을 직접 구현해 볼 차례입니다. 단순히 “어떤 … 더 읽기