DevKim

[영상처리] MATLAB 히스토그램(Histogram) : imhist, imadjust, gamma, piecewise linear 본문

영상처리

[영상처리] MATLAB 히스토그램(Histogram) : imhist, imadjust, gamma, piecewise linear

on_doing 2020. 9. 27. 17:01
728x90

히스토그램(Histogram)

- 각 밝기 값이 영상에서 존재하는 개수를 나타내는 그래프

 


Q) 히스토그램으로 어떤 정보를 얻을 수 있을까?

 

1. 화소들의 밝기 값이 낮은 영역에 많이 속하면 어두운 영상임을 알 수 있음

2. 화소들의 밝기 값이 높은 영역에 많이 속하면 밝은 영상임을 알 수 있음

3. 화소의 밝기 값이 넓은 범위에 걸쳐 분포하면 대비(contrast)가 좋은 영상(=선명함)

 


1. 히스토그램 구하기

imhist

p=imread('pot.tif');
figure,imshow(p);
figure,imhist(p),axis tight #axis tight를 사용하면 히스토그램 바가 꼭 맞게 디스플레이됨

x푹은 밝기 값, y축은 그것의 개수

→ 밝기 값들이 넓게 분포해있지 않고 가운데에 몰려있음대비가 좋지 않음

 


2. 히스토그램 스트레칭(대비 확장)

<1> imadjust(영상,[a b],[c,d])

: 히스토 그램을 옆으로 펴주어서 밝기 값이 넓게 분포하도록 변환하는 기법

 

x축은 원본의 밝기 값, y축은 변화 후 밝기 값
가운데 적용된 방정식

im : 원본 영상

[a b] : 원본 영상의 범위

[c d] : 변환된 영상의 범위 

 

* [a b] , [c d] 는 [0 1] 범위 내에 있어야 함

* im을 double 타입으로 자동 변환하여 처리함


p=imread('pout.tif');
ph=imadjust(p,[70/255 270/255],[0 1]); #범위를 0과1 사이로 나타내기 위해 255로 나눠줌
figure,imshow([p ph]);
figure,imhist([),axis tight;
figure,imhist(ph),axis tight;


<2> gamma

imadjust(영상,[a b],[c,d],gamma)

 

- 직선이 아닌 둥글게 스트레칭해줌


t=imread('tire.tif');
th=imadjust(t,[],[],0.5); #[]는 [0,1]과 동일함
figure,imshow([t th]);
figure,imhist(t),axis tight;
figure,imhist(th),axis tight;

→ 밝기 값이 어두운 곳은 늘어남, 밝은 곳은 범위가 줄어듦

 


<3> 부분적 선형(piecewise linear)

pix=find(im >=a(i) & im <a(i+1));

out(pix)=(im(pix)-a(i))*(b(i+1)-b(i))/(a(i+1)-a(i))+b(i)

 

 

 

<부분적 선형 함수 생성>

 

t=imread('tire.tif');
th=histpwl(t,[0 0.25 0.5 0.75 1.0],[0 0.75 0.25 0.5 1.0]);
imshow([t th]);
figure,plot(t(:),th(:),'.'); #(:)는 행렬을 일렬로 늘어트려줌 

728x90
Comments