2011-04-30 4 views

답변

2

로컬 대비를 계산하려면 휘도 이미지와 로컬 배경 휘도가 필요합니다.

이미 휘도 이미지가 있다고 가정하면 특정 픽셀의 로컬 배경 휘도는 로컬 영역의 모든 픽셀에 대한 평균을 취하여 계산할 수 있습니다.

우리는 수평 및 수직 방향으로 0 : (n-1) 픽셀만큼 이미지를 반복적으로 이동시킴으로써 이러한 로컬 배경 영역 세트 (원본 이미지에서 픽셀 당 하나)를 수집 할 수 있습니다.

다음 데모 기능은 기본 개념 설명 : 우리는 픽셀 라디안 또는 스테 라디안에서 매개 변수를 변환 할 필요가 진정한 정신 물리학 적 실험

function weberContrastDemo 

    imgWidthPixels   = 1024; 
    imgHeightPixels   = 1024; 
    localBackgroundSizePixels = 5; % square patch 

    luminance  = randn(imgHeightPixels, imgWidthPixels); 
    luminance(496:528, 496:528) = 20; 
    background = localMeanFilter(luminance, localBackgroundSizePixels); 
    weberContrast = (luminance - background);% ./ background; 

    imagesc(weberContrast); 
    title('Weber Contrast'); 
    colormap(gray); 

end 

function filteredImg = localMeanFilter(img, regionSizePixels) 

    offsetImages = getOffsetImages(img, regionSizePixels); 
    filteredImg = mean(offsetImages, 3); 

end 

function buffer = getOffsetImages(img, regionSizePixels) 
% GETOFFSETIMAGES 

    imgSize  = size(img); 
    imgHeight = imgSize(1); 
    imgWidth  = imgSize(2); 

    minDelta  = 0; 
    maxDelta  = (regionSizePixels-1); 

    bufferWidth = imgWidth + maxDelta; 
    bufferHeight = imgHeight + maxDelta; 
    bufferDepth = regionSizePixels .^ 2; 
    bufferSize = [ bufferHeight bufferWidth bufferDepth ]; 
    buffer  = zeros(bufferSize); 

    iSample = 0; 

    for deltaX = minDelta:maxDelta 

     iStartX = 1  + deltaX; 
     iEndX = imgWidth + deltaX; 
     idxX = iStartX:iEndX; 

     for deltaY = minDelta:maxDelta 

      iSample = iSample + 1; 

      iStartY = 1   + deltaY; 
      iEndY = imgHeight + deltaY; 
      idxY = iStartY:iEndY; 

      buffer(idxY, idxX, iSample) = img; 

     end 
    end 

    iMin = ceil(regionSizePixels/2); 
    iMax = iMin + (imgWidth-1); 
    buffer = buffer(iMin:iMax, iMin:iMax, :); 

end % GETOFFSETIMAGES 

을, 그래서 디스플레이 또는 이미지 캡처 장치를 보정해야 휘도 측정 값이 정확합니다.

관련 문제