[OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝] 5장_정리

SUN·2022년 12월 13일
0

1,2,3,4장은 생략하고 5장부터 시작

5장. 영상의 밝기와 명암비 조절

  • 5.1 영상의 밝기 조절

    영상의 밝기 조절은 행렬의 덧셈과 뺄셈 연산을 이용하여 구현할 수 있다

    트랙바를 이용하여 실시간으로 밝기 조절 결과를 확인할 수 있다

    5.1.1 그레이스케일 영상 다루기

    컬러 영상은 RGB 세개의 색상 채널을 가지고 있기 때문에 컬러 영상을 다루는 작업은 1채널 그레이스케일 영상을 다루는 것 보다 3배 많은 메모리와 연산 시간을 필요로한다(해서 10장에서 다룰예정)

    🔍 imread(filename, IMREAD_GRAYSCALE)

    영상, 이미지 파일을 그레이스케일 형태로 불러오는 함수와 인자

    5.1.2 영상의 밝기 조절

    영상의 전체적인 밝기를 조절하여 좀 더 밝거나 어두운 영상을 만드는 작업

    밝기를 조절하려면 입력 영상의 모든 픽셀에 일정 값을 더하거나 빼는 작업을 수행한다

    모든 픽셀에 양수 값을 더하면 영상이 밝아지고,

    양수 값을 빼면 영상이 어두워진다

    좌) 밝기 증가 . 우) 밝기 감소

    그림을 보면 dst 픽셀 값이 0보다 작아지거나 255보다 커지는 부분에서 직선이 꺾여있는것을 볼 수 있다

    255보다 큰 값을 결과 픽셀 값으로 설정할 수 없기 때문에, 최댓값인 255로 설정한다

    마찬가지로 결과 픽셀이 음수가 되는경우에도 범위의 최솟값인 0으로 설정한다

    행렬의 원소 값을 설정할때, 가질 수 있는 범위(0~255)를 벗어나는 경우 최솟값 또는 최댓값으로 값을 설정하는 연산을 포화(saturate)연산이라고 한다

    5.1.3 영상의 밝기 조절 직접 구현하기

    이중 for문을 이용하여 영상 전체를 스캔하고,

    반복문 안에서 결과의 픽셀 값을 설정한다

    255보다 큰 값이 되는 픽셀은 오히려 픽셀 값이 0에 가까운 어두운 픽셀로 바뀌게된다(예제 함수 brightness2())

    그렇기 때문에 포화연산을 고려해줘야한다(예제 함수 brightness3())

    5.1.4 트랙바를 이용한 영상의 밝기 조절

    결과 출력창에 트랙바를 부착하고, 트랙바가 움직일 때 트랙바 위치만큼의 밝기를 조절한다


  • 5.2 영상의 명암비 조절

    전체 픽셀에 적절한 실수를 곱하는 곱셈 연산을 사용한다

    5.2.1 기본적인 명암비 조절 방법

    명암비?

    영상에서 밝은 영역과 어두운 영역 사이에 드러나는 밝기 차이의 강도를 의미한다

    명암대비 또는 콘트라스트(contrast)라고 한다

    영상이 전반적으로 어둡거나 또는 전반적으로 밝은 픽셀로만 구성된 경우, 명암비가 낮다고 표현한다

    반면 밝은 영역과 어두운 영역이 골고루 섞여있는 영상은 명암비가 높다고 말한다

    명암비가 낮은 영상은 객체 간의 구분이 잘 되지않아 흐릿하게 느껴지고,

    명암비가 높은 영상은 사물의 구분이 잘 되고 선명한 느낌을 준다

    곱해지는 상수 s가 1보다 작은 경우 → 명암비가 낮아지는 효과
    곱해지는 상수 s가 1보다 경우 → 명암비가 높아지는 효과

    s = 0.5인 경우, 결과 픽셀이 가질 수 있는 값의 범위가 0부터 128사이로 제한되어 전체저으로 어두워지면서 명암비가 감소한다

    s = 2인 경우, 입력 영상에서 0부터 128 사이의 값을 갖는 픽셀은 0부터 255 사이의 값으로 변하기 때문에 명암비가 높아진다

    그러나 입력 영상에서 128이상의 값을 갖는 픽셀은 모두 포화되어 255의 값을 가지게 된다

    5.2.2 효과적인 명암비 조절 방법

    효과적으로 명암비를 높이기 위해서는 밝은 픽셀은 더욱 밝게, 어두운 픽셀은 더욱 어두워지게 변경해야한다

    예제에서는 그레이스케일 범위 중간값인 128을 기준으로 명암비를 조절하는 방법을 구현함

    입력 영상의 픽셀 값이 128보다 크면 더욱 밝게 만들고, 128보다 작으면 픽셀 값을 더 작게 만드는 방식

    명암비를 감소시키려면 128보다 큰 입력 영상 픽셀 값은 더 작게 만들고, 128보다 작은 픽셀 값은 오히려 128에 가깝게 증가 시킨다

    alpha : 1보다 같거나 큰 수

    알파의 범위가 -1 <= a <= 0이면
    기울기가 0부터 1사이의 직선이 되고 이는 명암비를 감소시키는 변환함수

    알파의 범위가 a > 0이면
    기울기가 1보다 큰 직선의 방정식이고, 명암비를 증가시키는 변환함수

    좌) 명암비 감소. 우) 명암비 증가

  • 5.3 히스토그램 분석

    5.3.1 히스토그램 구하기

    히스토그램?

    영상의 픽셀 값 분포를 그래프 형태로 표현한 것

    각 그레이스케일 값에 해당하는 픽셀의 개수를 구하고 이를 막대 그래프 형태로 표현함으로써 히스토그램을 구할 수 있다

    가로축을 히스토그램의 빈(bin)이라고 한다

    히스토그램의 빈 개수가 항상 픽셀 값 범위와 같아야하는것은 아니다

    히스토그램의 빈 개수가 줄어들면 히스토그램이 표현하는 영상의 픽셀 값 분포 모양이 좀 더 대략적인 형태로 바뀐다

    반대로 빈 개수가 많으면 세밀한 픽셀 값 분포 표현이 가능하다

    5.3.2 히스토그램 스트레칭

    영상의 히스토그램이 그레이스케일 전 구간에 걸쳐서 나타나도록 변경하는 선형 변환 기법

    명암비가 낮은 영상은 특정구간에 히스토그램이 집중되어 나타나는데,
    이를 마치 고무줄잡아 늘이듯 펼쳐서 히스토그램 그래프가 그레이스케일 전 구간에서 나타나도록 변환하는 기법이다

    히스토그램 스트레칭을 수행한 영상은 명암미가 높아지기때문에 대체로 보기 좋은 사진으로 바뀐다

    입력 영상의 픽셀 값 중에서 가장 큰 그레이스케일 값과 가장 작은 그레이스케일 값을 늘려 각각 0과 255로 되도록 변환해 히스토그램이 그레이스케일 전체 구간에 대해 나타나게 한다

    5.3.3 히스토그램 평활화(평탄화)

    히스토그램 스트레칭과 더불어 영상의 픽셀 값 분포가 그레이스케일 전체 영역에서 골고루 나타나도록 변경하는 알고리즘의 하나

    특정 그레이스케일 값 근방에서 픽셀 분포가 너무 많이 뭉쳐있는 경우 이를 넓게 펼쳐 주는 방식으로 픽셀 값 분포를 조절한다

0개의 댓글