2017-03-25 2 views
1

저는 matlab에서 매우 새롭습니다. 로컬 히스토그램 균등화 코드를 작성하고 싶습니다. 전역 히스토그램 평준화에 대한 코드가 작성되었으며 로컬 균등화는 이미지의 각 부분에 대해 균등하게 평등화를 수행한다는 것을 알고 있지만 내 질문은이 부분을 어떻게 선택해야합니까? 예를 들어 다른 픽셀의 이웃으로 분리 된 각 100 픽셀에 대해 균등화를 수행해야합니까? 다른 말로하면 이미지를 어떤 부분으로 분해 한 다음 각 부분을 균등하게 처리하는 방법은 무엇입니까?matlab의 로컬 히스토그램 균등화

+0

는 다음 읽기 : [https://en.wikipedia.org/wiki/Adaptive_histogram_equalization](https://en.wikipedia.org/wiki/Adaptive_histogram_equalization) 답변에 대한 – Rotem

+0

@Rotem 답변 주셔서 감사 – taranom

답변

1

당신이 물어 보는 가장 순진한 방법은 이미지를 겹치지 않는 블록들로 나누는 것입니다. 그 블록에 대한 글로벌 히스토그램 코드를 만들어 출력물에 저장하십시오. 이러한 겹치지 않는 블록의 행과 열을 변수 rowscols으로 정의했다고 가정합니다. 귀하의 경우 100x100이라고 가정 해 보겠습니다. 따라서 rows = 100; cols = 100;입니다. 서로 겹치지 않는 각 블록을 루프 처리하고 히스토그램 등화를 수행 한 다음이를 출력의 동일한 위치로 설정하면됩니다. 이미지를 가정

아래 뭔가 같이이 im에 저장되어

rows = 100; 
cols = 100; 
out = zeros(size(im)); % Declare output variable 

for ii = 1 : rows : size(im, 1) 
    for jj = 1 : cols : size(im, 2) 
     % Get the block 
     row_begin = ii; 
     row_end = min(size(im, 1), ii + rows); 
     col_begin = jj; 
     col_end = min(size(im, 2), jj + cols); 
     blk = im(row_begin : row_end, col_begin : col_end, :); 
     % Perform histogram equalization with the block stored in blk 
     % ... 

     % Assume the output of this is stored in O 
     out(row_begin : row_end, col_begin : col_end, :) = O; 
    end 
end 

참고 비 중첩 블록을 저장하는 변수의 복잡함 blk. 시작 행과 열을 단순히 루프 카운터 iijj으로 지정하지만, 끝 행과 열은 이미지의 크기로 제한되어야합니다. 그렇기 때문에 min 전화가 왔던 것입니다. 그렇지 않으면 끝나는 행과 열은 단순히 해당 행의 블록 크기만큼 추가 된 시작 행과 열입니다. 또한 컬러 이미지가있는 경우를 대비하여 :을 사용하여 3 차원으로 색인을 생성했습니다. 그레이 스케일은이 코드에 영향을 주어서는 안됩니다. 마지막으로 출력 이미지에 출력을 저장할 때 동일한 인덱싱을 사용해야합니다. 사용자 정의 히스토그램 등화 기능의 출력 인 변수 O에 저장되어 있다고 가정했습니다.

출력 out에는 로컬로 히스토그램 평등화 된 이미지가 포함됩니다. 이론적으로 이미지 처리 도구 상자에 blockproc을 사용하여 한 줄에이 작업을 수행 할 수 있습니다. 이렇게하면 이미지의 다른 블록을 처리하고 일부 기능을 적용합니다. 당신은 단순히 이런 짓을 했을까, 이퀄라이제이션 기능이 hsteq라고 당신의 히스토그램을 가정 :

rows = 100; cols = 100; 
out = blockproc(im, [rows, cols], @(s) hsteq(s.data)); 

첫 번째 입력은 처리 할 이미지가, 두 번째 입력 블록 크기를 정의하고 결국 마지막 요소는 당신이 원하는 기능입니다 각 블록에 적용 할 수 있습니다. blockproc은 사용자 정의 구조를 함수에 제공하므로 중요한 것은 구조의 data 필드를 꺼내는 것입니다. 위의 코드와 동일한 출력을 루프로 생성해야합니다.

+1

감사 – taranom

관련 문제