2013-07-02 2 views
0

이미지가 있습니다. 그런 다음 mean과 같은 일부 집계 함수를 사용하여 가장자리에 이미지를 투영합니다. 이런 식으로 1D 디지털화 된 데이터를 얻고 있습니다. 소스 이미지 아래 정확히 똑같은 수평 또는 수직 스케일로 어떻게 그려야합니까?이미지와 같은 축척 및 치수로 막대 그림을 만드는 방법은 무엇입니까?

샘플 코드 :

% loading image 
image = imread('..\..\FruitSample_small.png'); 

%computing gradients 
dx=double(image(1:end-1,2:end,:))-double(image(1:end-1,1:end-1,:)); 
dy=double(image(2:end,1:end-1,:))-double(image(1:end-1,1:end-1,:)); 

% computing total magnitude 
a=sqrt(sum(dx.^2,3)+sum(dy.^2,3)); 

% projection on bottom 
h = mean(a,1); 

% drawing 
figure; 
subplot(2,1,1); 
imshow(image); 

subplot(2,1,2); 

bar(h); 
axis image; 

는 여기 막대 그래프는 위의 이미지와 같은 폭 싶어요. 또한 이미지와 마찬가지로 히스토그램을 정확히 같은 가로 좌표로 퍼트 려야합니다.

답변

0

"축 이미지"는 이미지 축의 종횡비를 적용하므로 이미지의 표시 크기가 설정된 크기와 다를 수 있습니다. 내 제안은 정규화 된 단위에서 오는 자동 크기 조정 기능을 잊어 버리고 픽셀 크기에 따라 크기를 조정하는 것입니다. 이미지 축의 크기를 이미지의 크기와 정확하게 픽셀 단위로 설정하면 올바른 가로 세로 비율을 가지며 막대 그림에 동일한 크기를 사용할 수 있습니다.

load clown; % use a built-in demo image. Note the image is now in X 

%computing gradients 
dx=double(X(1:end-1,2:end,:))-double(X(1:end-1,1:end-1,:)); 
dy=double(X(2:end,1:end-1,:))-double(X(1:end-1,1:end-1,:)); 

% computing total magnitude 
a=sqrt(sum(dx.^2,3)+sum(dy.^2,3)); 

% projection on bottom 
h = mean(a,1); 

% drawing 
figure; 
subplot(2,1,1); 
imagesc(X); 
size_x = size(X,2); 
size_y = size(X,1); 
set(gcf, 'Units', 'pixels') 
fp=get(gcf, 'Position'); 
set(gca, 'Units', 'pixels'); 
set(gca, 'Position', [(fp(3)-size_x)/2, (fp(4)-size_y)/2 + 100, ... 
         size_x, size_y]); 

subplot(2,1,2); 
bar(h); 
set(gca, 'Units', 'pixels'); 
set(gca, 'Position', [(fp(3)-size_x)/2, 100, size_x, 100]); 
set(gca, 'XLim', [1 size_x]); 

숫자에 대한 결과를 중앙에 맞추기 위해 그림 크기에서 자동으로 오프셋을 계산하고 있습니다. 이것은 이 아니며이 아닙니다. 피규어 자체의 크기를 조정하면 세트 ('위치')를 재실행하여 위치를 재조정해야합니다. 동적으로 크기 조정이 필요할 경우 resize 이벤트에 대한 핸들러를 추가하고 모든 크기 조정시 크기를 조정해야합니다.

관련 문제