Big Data는 밑과 같은 걸로 표현할 수 있습니다.
형태, 모양 -> shape
중심 위치 -> mean
분산(산포) -> variance
이 중 위와 같은 것들을 알아보기 위해서는 Graph, Table를 통해 알아볼 수 있습니다. 그 중 사람들이 직관적으로 주어진 데이터를 알아보기 위해 사용한 것이 Graph의 histogram입니다.
도수라는 것은 사람들이 데이터를 어떤 분류로 나눈 것(양자화한 것) 을 뜻합니다. 즉, 영상처리에서의 도수는 [0~255]의 값을 가질 수 있습니다.
히스토그램을 만들기 위해서 먼저 주어진 데이터를 몇 개의 도수로 나눌 것인가가 필요합니다. 두 번째는 각 도수에 해당되는 데이터의 개수가 몇 개인지 세야 합니다. 세 번째는 가로축에 각각의 도수를 나타내고, 데이터의 개수를 막대 그래프 형태로 표현합니다.
이러한 히스토그램의 개념을 영상에 적용시켜서 주어진 영상에서의 명암값들이 어떤 형태를 가지고 있는지 나타내는 것이 영상처리에서의 히스토그램입니다.
영상이 [0, L-1] 사이의 명암값을 가지고 있을 때, 그 명암값들이 영상에 몇 번 나타나는지 표시합니다.
(1)
(2)
(1)은 히스토그램 알고리즘이며, (2)는 히스토그램의 모든 칸을 더하면 1.0이 되도록 변환한 정규 히스토그램입니다. l은 0 ≤ l ≤ L-1 인 명암값을 뜻합니다. 수학적으로 표현하여 복잡해보이지만, 사실 해당 식의 결과는 각각의 화소의 개수를 나열할 뿐입니다.
예를 들어 M과 N이 8이고, L=8인 영상이 있습니다. (1)식의 값이 h=(0,0,13,18,19,10,4,0)이면, 각각의 값을 MXN 값인 64로 나누어 (2)식은 h(l)=(0,0,0.203,0.281,0.297,0.156,0.063,0)으로 표현됩니다. 여기서 (2)식은 0 ≤ ≤ 1인 비율값으로 표현됩니다.
히스토그램 알고리즘의 슈도코드 (알고리즘 2-1 pdf 필기 확인)
입력: 명암 영상 f(j,i), 0 ≤ j ≤ M-1, 0 ≤ i ≤ N-1
출력: 히스토그램 h(l)과 정규 히스토그램 , 0 ≤ l ≤ L-1
for (l=0 to L-1) h(l)=0;
for (j=0 to M-1)
for (i=0 to N-1)
h(f(j,i))++;
for (l=0 to L-1)
h(l)=h(l)/(MxN)
히스토그램이 왼쪽으로 치우처져 있으면 어두운 영상이며, 오른쪽으로 갈수록 밝은 영상입니다. 따라서 히스토그램의 분포를 통해, 전체적인 영상 명암값들의 분포를 알 수 있습니다.
히스토그램 평활화란 히스토그램을 평평하게 만들어 주는 연산이며, 평평하게 만들어주는 방법에는 Histogram Equalization과 Histogram Straching이 있습니다.
히스토그램 평활화(Histogram Equalization)는 명암의 동적 범위를 확장하여 영상의 품질을 향상시켜줍니다. 명암의 동적 범위란 히스토그램이 많이 모여 있는 곳으로, 즉, 특정 영역에 모여 있는 명암값들을 양쪽으로 펴서 영상 품질을 높여주는 방법입니다.
명암의 동적 범위는 누적 히스토그램 c(.)의 기울기를 통해 구할 수 있습니다. 즉, 누적 히스토그램을 매핑 함수로 사용했다는 말은, 영상을 펴주는 데 있어서 누적 히스토그램에 가중치를 주어 누적 히스토그램이 많은 곳일 수록 더 많이 당겨주는 방법을 사용하겠다는 말입니다.
round는 반올림 연산입니다.
이때
그러나 이미 히스토그램이 골고루 펴져 있는 영상에 히스토그램 평활화를 적용하면 품질이 떨어질 수도 있습니다. 따라서 영상처리 연산은 분별력을 가지고 활용 여부를 결정해야 합니다.
흑백 영상(gray image)이란 [0~255]의 값을 가지고 있는 것을 말합니다. 이런 흑백 영상을 0 또는 255의 값을 갖는 것으로 바꾸면 이진 영상(binary image)이 됩니다.
주어진 gray image를 binary image로 만드는 것을 이진화라고 합니다. 이를 위해서는 두 구간을 가르는 임계값(Threshold)가 필요한데, 그 방법으로는 두 봉우리 사이의 게곡을 임계값 T로 결정하게 됩니다. 하지만 자연 영상에서는 계곡 지점 결정이 어렵기 때문에 나온 알고리즘이 오츄 알고리즘입니다.