분류 전체보기 22

6. C++의 진입장벽 포인터(Pointer)와 동적 할당: 도대체 왜 쓰는 걸까?

메모리 주소를 다룬다는 개념 자체는 이해하겠는데, 코딩을 하다 보면 "그래서 이걸 굳이 왜 이렇게 복잡하게 써야 하는가?"라는 근본적인 의문이 항상 따라다녔다.오늘 C++ 객체지향 프로그래밍 관점에서 포인터와 new 연산자를 배우며, 그 의문이 마침내 해소되었다.1. 포인터, 도대체 왜 쓰는 걸까? 포인터를 사용하는 가장 강력한 이유는 바로 '컴파일 시간(Compile-time)'이 아닌 '실행 시간(Runtime)'에 어떠한 결정을 내리기 위해서다.파이썬의 리스트는 데이터를 넣는 대로 무한히 늘어난다. 하지만 C++의 기본 배열은 다르다.C++int arr[100]; // 재래적(절차적) 프로그래밍의 배열 선언 이렇게 코드를 짜면, 프로그램이 실행되기도 전(컴파일 단계)에 이미 100칸짜리 공간이 고정..

C++ 2026.03.03

4. 복합 데이터형: 깐깐한 배열(Array) 규칙부터 구원자 'string'까지

C++은 기본 자료형(int, float 등)을 엮어서 사용자 정의대로 새로운 형태를 만들 수 있는 '복합 데이터형'을 제공한다. 그중 가장 기본이 되는 것이 같은 데이터형의 집합인 배열(Array)이다.배열이라는 개념 자체는 익숙하지만, 메모리를 직접 통제하는 C++ 생태계에서는 배열을 선언하고 다루는 데에 생각보다 훨씬 엄격한 제약들이 존재한다. 오늘은 배열과 관련된 C++만의 깐깐한 규칙들을 확인하고, 이 불편함을 해소해 주는 모던 C++의 string 객체까지 정리해 보았다.1. 배열의 선언과 엄격한 대입 규칙C++에서 배열을 선언하는 기본 형태는 typeName arrayName[arraySize]; 다. 이때 컴파일러는 지정된 크기만큼의 연속된 메모리 공간을 미리 꽉 잡아둔다. 이 메모리 구조..

C++ 2026.02.27

Part 11 : 기하학적 변환 (Geometric Transformation)

기하학적 변환은 영상의 픽셀 밝기 값을 바꾸는 것이 아니라, 픽셀의 물리적인 위치(좌표)를 수학적인 행렬 연산을 통해 이동시키는 작업이다.의료 영상에서는 환자의 자세가 틀어져 비스듬하게 촬영된 방사선 영상을 정방향으로 보정하거나, 분석이 필요한 특정 장기 영역(ROI)을 정밀하게 확대 및 축소할 때 필수적으로 사용되는 전처리 기법이다.1. 크기 변환(Scaling)과 보간법(Interpolation)영상의 해상도를 높여서 확대하거나 반대로 축소할 때 가장 큰 문제는 '원래 없던 빈 공간의 픽셀 값을 어떻게 채워 넣을 것인가'이다. 이 빈자리를 주변 픽셀들의 정보를 바탕으로 합리적으로 추정하여 채워 넣는 수학적 기법을 보간법(Interpolation)이라 한다.어떤 보간법을 선택하느냐에 따라 의료 영상의 ..

영상처리 2026.02.27

Part 10 : 모폴로지 연산 (Morphological Operations)

모폴로지 연산은 영상 내 객체의 '형태'를 분석하고 조작하는 기술이다. 주로 이진 영상(Binary Image)에서 작은 잡음을 없애거나, 끊어진 혈관을 잇고, 장기의 윤곽선을 추출하는 등 의료 영상의 전처리 및 후처리에 널리 활용한다.1. 침식(Erosion)과 팽창(Dilation)모폴로지의 가장 기본이 되는 두 연산이다. 모든 연산은 커널(Kernel) 혹은 구조 요소라고 불리는 작은 행렬을 영상 위에서 슬라이딩하며 수행한다.침식 (Erosion) : 원리: 커널 범위 내의 모든 픽셀이 1(흰색)일 때만 중심 픽셀을 1로 유지하고, 하나라도 0(검은색)이 있으면 0으로 바꾼다.효과: 객체의 크기가 줄어들며, 배경에 흩어져 있는 아주 작은 흰색 잡음(Noise)을 깎아서 없애버릴 때 유용하다.팽창 (..

영상처리 2026.02.27

Part 9 : 주파수 영역 필터링 (LPF & HPF)

주파수 영역에서의 필터링은 마치 체(Sieve)를 이용해 원하는 크기의 모래알만 걸러내는 과정과 같다. 앞서 2차 퓨리에 변환 결과인 스펙트럼 영상에서 정중앙은 저주파 성분(부드러운 배경)이 모여 있고, 가장자리 외곽은 고주파 성분(날카로운 경계선, 노이즈)이 모여 있다는 점을 기억해야 한다.1. 저역통과필터 (Low Pass Filter, LPF)와 마스킹 원리저역통과필터(LPF)는 이름 그대로 '낮은 주파수(Low Frequency)만 통과(Pass)시키는 필터'이다.원리 및 효과: 스펙트럼의 정중앙(저주파) 부분만 살려두고, 외곽에 퍼져 있는 고주파 성분은 모두 0(검은색)으로 지워버린다. 고주파 성분인 날카로운 윤곽선이나 거친 노이즈가 사라지게 되므로, 최종적으로 영상을 다시 원래대로 복원(역변환..

영상처리 2026.02.27

Part 8 : 주파수 영역 영상처리와 퓨리에 변환

주파수 영역 영상처리는 영상을 공간 영역이 아닌 주파수 영역으로 변환하여 분석하는 기법이다. 이를 위해 1차 및 2차 퓨리에 변환(Fourier Transform)을 수행한다.1. 1차 퓨리에 변환 (1D FFT)사인(Sine)파와 코사인(Cosine)파의 조합으로 구성된 신호를 주파수 대역으로 변환하여 스펙트럼을 분석한다. [실습 코드: 1차 퓨리에 변환]Pythonfrom numpy import pi as piFs = 1. # the sampling frequency, 초당 1000회.Ts = 1. / Fs # the sampling periodN = 8 # 샘플 개수, 1000개의 데이터를 만든다.freqStep = Fs / N # resolution of the frequency in ..

영상처리 2026.02.26

3. 'const'와 형변환 'static_cast'

프로그램을 작성하다 보면 변수(Variable)와 반대로 절대 변해서는 안 되는 값들이 존재한다. 원주율(Pi)이나 데이터 버퍼의 최대 크기 같은 것들이다. 오늘은 이런 데이터들을 안전하게 잠가두는 방법과, 필요에 따라 데이터의 형태를 바꾸는 '형변환(Type Conversion)'에 대해 정리해 본다. 특히 형변환 파트에서는 C 언어와는 확연히 달라진 C++만의 모던한 문법이 등장한다.1. 절대 바뀔 수 없는 수, 상수와 const 제한자C 언어에서는 상수를 정의할 때 주로 파일 최상단에 매크로를 이용해 #define PI 3.14 형태로 선언하곤 했다. 하지만 C++에서는 이 방식보다 const 제한자를 사용하는 것을 훨씬 권장한다.C++#include using namespace std;int ma..

C++ 2026.02.26

2. 크기 제한: 기본 자료형과 climits

파이썬(Python)은 데이터 타입에 무척 관대하다. 변수를 선언할 때 타입을 명시할 필요도 없고, 정수(int)의 크기가 아무리 커져도 메모리가 허락하는 한 무한대로 숫자를 담아낸다. 반면, 하드웨어를 직접 제어하던 C 언어의 유전자를 물려받은 C++은 데이터를 담는 '그릇의 크기'를 개발자가 1바이트 단위로 깐깐하게 지정해주어야 한다.오늘은 C++의 기본 자료형(정수와 실수)을 다루면서, 파이썬에서는 신경 쓸 필요 없었던 메모리 크기 제어와 C++만의 특징들을 정리해 보았다.1. 정수형과 실수형, 그리고 데이터 손실(Truncation)변수에 정수(소수점 없음)와 실수(소수점 있음)를 담는다는 기본 개념은 어느 언어나 똑같다. 하지만 C++에서는 데이터를 담는 그릇의 크기가 엄격하게 나뉘어 있다.정수..

C++ 2026.02.26

Part 7 : 다중 주파수 및 피라미드 선명화

1. 다중 주파수(Multi-frequency) 영상 선명화이 기법은 원본 영상에서 서로 다른 크기의 인접 픽셀을 평균하여 여러 개의 평활화(Smoothed) 영상을 만든 뒤, 이를 활용해 영상의 세부 정보를 단계별로 강조하는 방식이다.처리 과정:원본 영상에 다양한 커널 크기(5 X 5, 11 X 11, .... , 35 X 35)를 적용하여 여러 평활화 영상을 생성한다.원본 영상과 평활화 영상 사이의 뺄셈을 통해 여러 개의 차영상(Subtraction images)을 만든다.차영상에 대해 비선형 변환 및 대비에 따른 강조 처리(Contrast-dependent emphasis)를 수행한다.강조된 결과물들을 하나로 결합하여 최종적으로 다중 주파수가 강조된 이미지를 얻는다.[실습 코드: 다중 주파수 선명화..

영상처리 2026.02.25

Part 6 : Gabor 및 가우시안 필터

1. 가우시안 필터 (Gaussian Filter)가우시안 필터는 의료 영상 처리에서 가장 많이 사용되는 필터 중 하나로, 가우시안 커널을 영상과 컨볼루션하여 노이즈를 제거하고 영상을 부드럽게 만든다.수리적 표현: 2D 가우시안 함수는 다음과 같이 표현되며, u는 평균(mean), sigma는 분산(variance)을 나타낸다.OpenCV 함수: cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])를 사용한다.특징: 커널 사이즈(ksize)의 가로, 세로 길이는 모두 양수의 홀수여야 한다. [실습 코드: 1D 커널을 이용한 2D 가우시안 필터 생성 및 적용]Pythonimport cv2import numpy as npfrom google..

영상처리 2026.02.25