2013-06-05 2 views
1

MATLAB에서 이미지 세트를 가져 왔으며 그 이미지를 회색 음영으로 변환했습니다. 나는 이제 "그레이 스케일 이미지의 3D 매트릭스"라는 이미지 스택을 만들어야합니다. 이 후, 나는 "이미지 스택의 각 레이어의 이중 의미"를 취하여 1 차원 이미지 강도 배열을 만들어야합니다. 여기에 지금까지 (내가 몇 가지 이미지를 가져올 수) 내 코드입니다 :MATLAB에서 이미지 스택 만들기

for i=139:141 

string2 = num2str(i); 

% Concatenate several strings, produce file name 
str = [string, string2, string3]; 

% Read image 
a = imread(str); 

% Get image dimensions 
size(a) 

% Convert to grayscale 
b = rgb2gray(a); 

'크기 (A)'수익률 '1728 X 2592 X 3'. 이는 모든 이미지에 해당됩니다. 내가 어떻게 그레이 스케일 이미지의 3D 매트릭스를 만들 수 있는지 궁금하네요. 그리고 제가 위에서 언급 한 1D 이미지 배열을 어떻게 만들 수 있는지 궁금합니다. 나는 "이중 의미는"3 차원 매트릭스

mean(mean(...)). 

을 의미, 아마도 잘못 믿고있어, 내가 가진

% Pre-allocate 3D matrix 
ImStack = zeros(1728, 2592, 3, class(b)); 

% Add images to ImStack 
ImStack(:,:,1) = b; 

이 내가 매스 웍스 도움말 포럼에서 발견 템플릿을 다음,

b = 0 (2000,2000, number_of_images, class (a));

b (:, :, 1) = a;

그러나 1D 이미지 밝기 배열을 만드는 방법을 잘 모르겠습니다. 귀하의 조언은 크게 감사하겠습니다. 고맙습니다.

답변

5

코드가 대부분입니다. 그러나,이 라인에서 문제이다 :이 이미지 스택의 첫번째면의 각 화상을 배치

ImStack(:,:,1) = b; 

, 그리고 동일한 위치에서 마지막에 덮어 쓰기한다. 이 같은 각 이미지에 대해 서로 다른 인덱스를 사용해야합니다

ImMean = mean(ImStack,3); 

다른 한 참고 : 세 번째 차원에 따라 평균하여 매우 쉽게 의미를 찾을 수 있습니다 완료

ImStack(:,:,i-138) = b; % subtract 138 because i starts at 139 in your code 

당신이 경우 이미지가 너무 많아서 한 번에 모두를 보유하는 스택을 만들면 메모리가 부족해질 수 있습니다. 평균을 생각해내는 또 다른 방법은 각 이미지를 합계로 더하고 끝에 이미지의 총 개수로 나누는 것입니다.

+0

좋아요! 대단히 고마워요, 이건 완벽하게 작동합니다. 다시 감사합니다. – scimaks