일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 가우시안 필터링
- c++공부
- 김성훈 교수님 PyTorch
- c언어
- object detection
- c++
- MFC 프로그래밍
- tensorflow 예제
- Pytorch Lecture
- 미디언 필터링
- 파이토치 김성훈 교수님 강의 정리
- 딥러닝 공부
- c언어 정리
- 파이토치
- matlab 영상처리
- pytorch
- 파이토치 강의 정리
- C언어 공부
- 컴퓨터 비전
- 영상처리
- 골빈해커
- 팀프로젝트
- 모두의 딥러닝 예제
- pytorch zero to all
- 딥러닝 스터디
- 해리스 코너 검출
- 딥러닝
- 케라스 정리
- 모두의 딥러닝
- TensorFlow
- Today
- Total
ComputerVision Jack
[컴퓨터 비전 - 영상 밝기와 명암비] 본문
영상의 밝기 조절
그레이 스케일 영상 다루기
imread()함수의 두번째 인자에 IMREAD_GRAYSCALE 플래그 설정
Mat img = imread("lenna.bmp", IMREAD_GRAYSCALE);
Mat img = imread("lenna.bmp", IMREAD_COLOR);
Mat image;
cvtColor(img, image, COLOR_BGR2DGRAY);
#영상을 Color로 읽어올 경우 cvtColor()함수를 이용하여 grayscale로 변환한다.
[영상의 밝기 조절]
밝기 조절 : 영상의 전체적인 밝기 조절하여 좀 더 밝거나 어두운 영상을 만드는 작업
모든 픽셀에 일정 값을 더하거나 빼는 작업 수향
dst(x, y) = src(x, y) + n
포화 연산 설정을 적용해야 한다.
Mat dst = src + n;
수식을 통하여 연산이 가능하다.
포화 연산을 고려하지 않을 경우
영상이 정말 많이 깨진다.
따라서 무조건 포화연산을 고려해야 한다.
template<> inline
uchar saturate_cast<uchar>(int v);
#saturate_cast()함수는 템플릿 함수로 정의되어 있다.
따라서 덧셈 연산자 재정의를 통하여 접근해도 되지만,
dst.at<uchar>(j, i) = saturate_cst<uchar>(src.at<uchar>(j, i) + 100);
같이 픽셀에 직접 접근하여 saturate_cast를 적용한다.
영상의 명암비 조절
[영상의 명암비 조절]
명암비 : 영상에서 밝은 영역과 어두운 영역 사이에 드러나느 밝기 차이의 강도를 의미한다.
콘트라스트(constrast)라고 한다.
명암비가 높은 영상은 사물의 구분이 잘 되며 선명한 느낌을 준다.
dst(x, y) = src(x, y) + (src(x, y) - 128) * a
명암비를 효과적으로 높이기 위해서는 밝은 픽셀은 더욱 밝게, 어두운 픽셀은 더욱 어두워지게 변경해야 한다.
포화 연산까지 적용해 줘야 한다.
a값 설정
수식 그래도 적용하면 밝기 조절 처럼 적용 가능하다.
히스토그램 분석
히스토그램
영상의 픽셀 값 분포를 그래프 형태로 표현한 것.
그레이스케일 경우 각 그레이스케일 값에 해당하는 픽셀의 개수를 구하고, 막대그래프 형태로 표현함으로써 히스토그램을 구할 수 있다.
컬러 영상 경우, 세 개의 (RGB)색상 성분 조합에 따른 픽셀 개수를 계산하여 히스토그램을 구한다.
히스토그램에서 가로축을 히스토그램의 빈이라고 한다.
그레이스케일 경우 256(0 ~ 255)의 빈 크기를 갖는다.
빈 개수가 줄어들면 픽셀 값 분포 모양이 좀더 대략적으로 바뀌고 많으면 세밀한 분포 표현이 가능하다.
void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist,
int dims, const int* histSize, const float** ranges, bool uniform = true, bool accumulate = false);
#히스토그램을 구하는 함수
[코드]
const int histSize[] = {256};
float graylevel[] = {0, 256};
const float* ranges[] = {graylevel};
calcHist(&img, 1, channels, noArray(), his, dims, histSize, ranges);
return his;
getGrayHistImage(calcGrayHist(dst))); 함수로 히스토그램을 볼수 있다.
히스토그램 스트레칭
영상의 히스토그램이 그레이스케일 전 구간에 걸쳐서 나타나도록 변경하는 선형 변환 기법
명암비가 낮은 영상의 경우 히스토그램이 특정 구간에 집중된다.
따라서 히스토그램을 잡아 당겨 히스토그램 그래프가 전 구간에서 나타나도록 변환하는 기법
히스토 그램 스트레칭은 명암비 조절에 탁월하다.
히스토그램 평활화
히스토그램 스트레칭과 더블어 영상의 픽셀값 분포가 그레이스케일 전체 영역에서 골고루 나타나도록 변경하는
알고리즘
히스토그램 균등화, 히스토그램 평활화라고도 한다.
히스토그램 누적함수를 통하여 정의한다.
void equalizeHist(InputArray src, OutputArray dst);
#히스토그램 평활화를 수행하는 함수
특정 그레이스케일 부분에 영상이 몰려있다.
히스토그램 평활화를 사용하여 넓게 펴준다.
'Image Processing > Computer Vision' 카테고리의 다른 글
[컴퓨터 비전 - 필터링] (0) | 2020.01.28 |
---|---|
[컴퓨터 비전 - 영상의 연산] (0) | 2020.01.22 |
[컴퓨터 비전 - openCV주요 기능] (0) | 2020.01.17 |
[컴퓨터 비전 - opencv기본] (0) | 2020.01.15 |
[컴퓨터 비전 개요] (0) | 2020.01.14 |