Image 如何使用Matlab识别视频/图像中的多个范围?

Image 如何使用Matlab识别视频/图像中的多个范围?,image,matlab,Image,Matlab,我正在处理rgb图像数据,我需要使用多个范围对其进行分析。所以我选择范围1,它是整个数据范围,范围2,它由2个范围组成,每个范围是数据范围的一半,范围3,它由4个范围组成,每个范围是我数据的1/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 ra

我正在处理rgb图像数据,我需要使用多个范围对其进行分析。所以我选择范围1,它是整个数据范围,范围2,它由2个范围组成,每个范围是数据范围的一半,范围3,它由4个范围组成,每个范围是我数据的1/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);

我需要对所有图像帧的所有rgb数据的进一步范围执行此分析,总共114个。请告知。

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);
这显然需要工作,因为如果无法将帧平均划分为您想要的范围,它将崩溃