2013-10-22 4 views
0

rgb 이미지 데이터로 작업 중이므로 여러 범위를 사용하여 이미지를 분석해야합니다. 따라서 전체 데이터 범위 인 범위 1, 범위 2는 각각 데이터 범위의 절반 인 범위 2, 범위 3은 각 데이터의 1/4 인 범위 4 개로 구성됩니다.Matlab을 사용하여 비디오/이미지에서 여러 범위를 식별하는 방법은 무엇입니까?

% The raw data is a video sequence, it is stored into frames, and I'm working with 1 frame at a time. 
% These ranges deal with the r component only 
range_1=image_data(:,:,1,1); 
%range 2 
% for i=1:2 
%  range2(:,:,:,i)=image_data(1:1:vidHeight,1+((i-1)*vidWidth/2):1:(i-1)*vidWidth,1,1); 
% end 
range_2_1=image_data(1:1:vidHeight,1:1:vidWidth/2,1,1); 
range_2_2=image_data(1:1:vidHeight,1+vidWidth/2:1:vidWidth,1,1); 
%range 3 
range_3_1=image_data(1:1:vidHeight/2,1:1:vidWidth/2,1,1); 
range_3_2=image_data(1+vidHeight/2:1:vidHeight,1:1:vidWidth/2,1,1); 
range_3_3=image_data(1:1:vidHeight/2,1+vidWidth/2:1:vidWidth,1,1); 
range_3_4=image_data(1+vidHeight/2:1:vidHeight,1+vidWidth/2:1:vidWidth,1,1); 
%range 4 

range_4_1=image_data(1:1:vidHeight/4,1:1:vidWidth/2,1,1); 
range_4_2=image_data(1+vidHeight/4:1:vidHeight/2,1:1:vidWidth/2,1,1); 
range_4_3=image_data(1+vidHeight/2:1:3*vidHeight/4,1:1:vidWidth/2,1,1); 
range_4_4=image_data(1+3*vidHeight/4:1:vidHeight,1:1:vidWidth/2,1,1); 
range_4_5=image_data(1:1:vidHeight/4,1+vidWidth/2:1:vidWidth,1,1); 
range_4_6=image_data(1+vidHeight/4:1:vidHeight/2,1+vidWidth/2:1:vidWidth,1,1); 
range_4_7=image_data(1+vidHeight/2:1:3*vidHeight/4,1+vidWidth/2:1:vidWidth,1,1); 
range_4_8=image_data(1+3*vidHeight/4:1:vidHeight,1+vidWidth/2:1:vidWidth,1,1); 

는 I 모든 영상 프레임에 대한 모든 RGB 데이터 (114)의 전체에 대한 상기 범위는이 분석을 수행 할 필요가 다음과 같이 I가 달성 할 수있는 소형 MATLAB 코드 필요 내 코드는 지금까지이다. 제발 조언.

답변

0

mat2cell 나는 당신이 찾고있는 것을 수행합니다. 프레임 데이터로 mat2cell을 호출하고 수신하려는 하위 행렬의 크기를 전달합니다. 예를 들어,

frame = rand(128,128); 

range1 = frame; 
range2 = mat2cell(frame,[64,64],[64,64]); 
range3 = mat2cell(frame,[32,32,32,32],[32,32,32,32]); 

등입니다. 두 번째 및 세 번째 인수는 각 하위 행렬의 너비와 높이입니다. 결과는 셀 배열에 저장됩니다.

당신은 이것을 매우 쉽게 수행 할 수있는 함수를 작성할 수 있습니다. 당신이 시작하는이 분명히 작업을 필요로

function ranges = range_fun(frame, num_ranges) 
ranges1 = repmat(size(frame,1)/num_ranges,1,num_ranges); 
ranges2 = repmat(size(frame,2)/num_ranges,1,num_ranges); 

ranges = mat2cell(frame,ranges1,ranges2); 

, 프레임이 균등하게 당신이 원하는 어떤 범위로 분할 할 수없는 경우가 충돌합니다한다.

+0

나는 확실히 두 가지 방법으로 시도 할 것입니다. –

관련 문제