본문 바로가기
CS전공강의/디지털 이미지 프로세싱

Matlab 모르는 상태로 Histogram equalization 과제하기 ...

반응형

Matlab을 인생 처음 써보는 상태에서,,, histogram equalization을 하는 과제를 받았다 ^_^

 

원래 미리미리 공부해두려고 하는데,, 무려 선수과목 3개를 건너 뛴 상태로 듣고 있는 "무선보안" 덕분에 ㅎㅎ 회로이론 공부와 전송선로 과제에만 거의 매일을 썼다 🥲 (앞으로도 그럴 예정)

 

(1) myCDF.m 코드를 채워서 함수 정의 마무리하기 ...

(2) myHE.m 코드를 채워서 histogram equalization 하기

(3) myCDF.m, myHE.m 활용해서 Adaptive histogram equalization 실행하기 

 

강의 때 설명해주신 알고리즘도 다 이해 못한 상태로 안 써본 매트랩을 활용해서 과제를 완수할 수 있을까 ? 


내가 원하는 자료 보는 법에 대해 ... 각종 차트 ...

출처(https://electronlibrary.tistory.com/11)

 

t = -10:10;
x = -10:10;
 
x(t<0) = 0;
x(t>=0) = 1;
 
stem(t,x)
axis([-10 10 -1 1])
grid on
 

 

여기서 axis함수는 [수평축최소 수평축최대 수직축최소 수직축최대]의 값을 설정해준다.

이것저것  찾아보다가 'plot'을 알게 되었는데, 여기서는 stem을 썼다.

 

둘의 차이점은, plot은 값들의 지점들을 선으로 연결하고, stem은 위의 figure1처럼 일직선을 그려준다.

 

CDF관련 개념, 구현하기

과제 자료에서 나온 정의는 위의 수식과 같다.

확률 변수 X가 특정 값보다 작거나 같을 확률을 나타내는 함수이다.

 

이를 구현하기 위해서는, compute the probability p(x) for every intensity value x 각각의 값들이 나올 확률을 저장한 후 // compute the sum of p from 0 to x 위의 제시된 정의처럼 특정 값보다 작을 확률이므로, x보다 작은 확률들의 합을 저장하여 F(x)를 구해야 한다.

 

// 구현 코드 // 

function output = myCDF(image)
 
output = zeros(256,1);
 
 
% todo
[wid, hig] = size(image); %이미지의 MxN값
total = wid * hig; %전체픽셀개수
prob = zeros(256, 1);
 
%임시 저장용도
a = 1:256;
b = 0:255;
 
pixel = 0;
for idx=1:256
  for i=1:wid
    for j=1:hig
 
      if image(i,j) == idx-1
        pixel = pixel + 1; %카운트
      end
    end
  end
  a(idx) = pixel;
  %fprintf('%f', a(idx));
  prob(idx) = a(idx) / total;
  %fprintf('%f', prob(idx));
  pixel = 0; %초기화
end
 
% histgram = stem(b,a);
% grid on;
% xlabel('x축');
% ylabel('y축');
%
% title('임시 히스토그램')
 
sum = 0;
 
for i=1:256
  sum = sum + prob(i);
  %fprintf('%f', sum);
  output(i) = (sum/total)*255;
  %fprintf('%f', output(i));
end
 
 
end
 
// 실행 화면 //
 
반응형