분류 전체보기
-
Unsharp Masking 기법컴공지식/컴퓨터비전 2024. 9. 6. 23:02
Unsharp Masking 과정을 통해서 이미지를 샤프하게 만드는 방법을 소개하겠다 이를 위해선 일단 Original Signal과 Blurred Signal을 알 필요가 있다.이 그래프는 원래의 이미지 신호 ( Original Signal ) 를 나타낸다. 이 신호가 우리가 가진 원본 이미지다.원본 신호에 블러(흐림) 처리를 해서 부드럽게 만든 신호( Blurred Signal )다.블러는 주로 Gaussian 블러 같은 필터를 사용해서 구현한다.흐리게 만드는 이유는, 나중에 이 흐림 신호를 원본에서 빼서 엣지 부분만 추출할 수 있기 때문이다. 언샤프 마스크는 원본 신호에서 블러 처리된 신호를 뺀 값이다.이 차이를 계산하면 이미지의 엣지(경계) 부분이 강조된다. 마치 엣지 디텍션처럼 이미지의 경계선..
-
샤프닝(Sharpening)이란?컴공지식/컴퓨터비전 2024. 9. 6. 22:49
샤프닝은 이미지를 더 선명하게 만들어서 디테일을 강조하는 기술이다.샤프닝의 주된 목적은 명암 전환(즉, 밝기 변화)이 있는 부분을 강조하는 거다.쉽게 말해, 이미지에서 경계가 뚜렷한 부분(예: 물체의 윤곽선)을 더 강조해서 날카롭게 보이게 만드는 거다. 왼쪽의 원본 이미지에서는 달의 표면 디테일이 상대적으로 부드럽게 보이지만, 오른쪽의 샤프닝된 이미지는 표면의 윤곽과 경계가 더 뚜렷하게 강조되었다. 샤프닝은 주로 공간 미분(Spatial Differentiation) 을 사용한다.공간 미분이란 이미지에서 픽셀 간의 차이를 계산하는 방식인데, 이걸 통해 경계 부분을 더욱 두드러지게 만든다.
-
마스크 크기의 중요성컴공지식/컴퓨터비전 2024. 9. 6. 22:41
필터링할 때 사용하는 마스크(커널)의 크기가 필터링 결과와 계산 비용에 큰 영향을 미친다.작은 마스크는 작은 영역의 픽셀들에만 영향을 미치고, 큰 마스크는 더 넓은 영역에 영향을 미친다.따라서 필터링할 대상이 작은지 큰지에 따라 적절한 크기의 마스크를 선택해야 한다. 작은 물체나 세부적인 부분을 블러링할 때는 작은 마스크를 사용하는 게 좋다.큰 마스크는 더 넓은 영역을 필터링하기 때문에, 계산에 드는 비용이 많이 든다.이미지의 각 픽셀에 대해 큰 마스크를 적용해야 하므로, 전체적인 계산량이 크게 증가해 처리 시간이 길어질 수 있다.
-
Averaging Filter와 Gaussian Filter컴공지식/컴퓨터비전 2024. 9. 6. 21:15
Averaging Filter는 이미지의 특정 영역(이웃한 픽셀들)의 값을 평균 내서 중심 픽셀의 값을 대체하는 필터다.이렇게 하면 이미지가 부드럽게 변하면서 노이즈가 줄어든다. 필터 마스크가 덮고 있는 영역 내의 모든 픽셀 값의 평균을 계산한다.예를 들어, 3x3 크기의 마스크를 사용한다면, 9개의 픽셀 값을 더한 후 9로 나눈 값을 중심 픽셀 값으로 설정하는 거다. 이 필터는 Low Pass Filter라고도 불린다.고주파 성분(즉, 급격한 밝기 변화)을 억제하고, 저주파 성분(즉, 서서히 변하는 밝기)을 남기기 때문에 이렇게 불린다.그래서 이미지의 세부 디테일이 줄어들면서 부드럽게 처리된다.이미지의 모든 픽셀에 대해, 그 픽셀이 포함된 이웃 영역의 평균 값으로 픽셀 값을 대체한다.이 과정을 이미지의..
-
Spatial Filtering이란?컴공지식/컴퓨터비전 2024. 9. 6. 17:34
Spatial Filtering은 이미지의 공간 영역에서 특정 마스크(또는 커널, 템플릿, 윈도우)를 사용해 필터링 작업을 수행하는 기법이다.이 마스크(또는 커널)는 작은 매트릭스 형태로, 특정 연산을 위해 이미지의 각 픽셀에 적용된다. Spatial filters = spatial masks, kernels, templates, windows 모두 같은 의미로 사용된다. 위 그림은 3x3 크기의 Spatial Filter가 어떻게 적용되는지를 보여준다.3x3 필터 마스크가 이미지 위에 놓여있다. 이 마스크가 이미지의 특정 부분과 겹쳐지는 방식으로 적용된다.필터 마스크 내부에는 각 위치의 값들이 있고, 이미지의 해당 위치에 있는 픽셀 값과 곱해진 후 합산된다.f(x, y)는 이미지의 각 픽셀 값을 의미..
-
감마 보정(Gamma Correction) 구현컴공지식/컴퓨터비전 2024. 9. 6. 00:36
이것도 마찬가지로 Intensity Transformation 중 하나인데코드로 살펴보자 이미지와 변수 초기화Mat image = imread("lena.png", 0); Mat gamma_img; float gamma = 0.5; unsigned char pix[256]; 이 또한 그레이스케일로 이미지를 불러오고 감마 보정을 적용한 결과를 저장할 gamma_img라는 변수를 선언한다.감마 값을 0.5로 설정한다. 감마 값이 1보다 작으니까, 결과 이미지는 원본보다 더 밝아지게 될 것이다.픽셀 값 변환을 위해 0부터 255까지의 값을 담는 배열을 선언한다. 감마 변환 테이블 생성for (int i = 0; i pix[i] = saturate_cast(pow((float)(i / 255.0), g..
-
로그 변환(Log Transformation) 구현컴공지식/컴퓨터비전 2024. 9. 6. 00:32
이것도 Intensity Transformation 중 하나인데 코드를 통해서 구현해보자 다음과 같이 이미지를 불러오고(이것도 마찬가지로 그레이스케일)Mat image = imread("lena.png", 0); 필요한 변수와 매트릭스를 생성해준다.Mat f_img, log_img; double c = 1.5f; // scale constant f_img와 log_img는 각각 변환된 이미지를 저장할 매트릭스다.c는 스케일 상수로, 로그 변환의 결과를 스케일링하는 데 사용한다.여기서는 1.5로 설정됐다. 그 다음은 이미지 타입을 변환해야 한다.image.convertTo(f_img, CV_32F); 이미지 데이터를 float 타입(CV_32F)으로 변환해 f_img에 저장한다.로그 변환은 실수형 데..
-
네거티브 변환(Negative Transformation) 구현컴공지식/컴퓨터비전 2024. 9. 6. 00:27
Intensity Transformation 중 네거티브 변환 구현 코드를 살펴보자 다음과 같이 이미지를 불러왔다고 치자Mat image = imread("lena.png", 0); 0을 두 번째 인자로 줬기 때문에 이미지는 그레이스케일이 된다. 그 다음은 네거티브 이미지를 위한 복사본 생성한다.Mat negative_img = image.clone(); image.clone()을 사용해 원본 이미지와 동일한 크기와 타입을 가진 negative_img라는 새로운 이미지를 생성한다. 이제 네거티브 변환을 수행해보자for (int j = 0; j for (int i = 0; i negative_img.at(j, i) = 255 - image.at(j, i); 여기서 이중 for 루프..