0

我正在处理 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 个。请告知。

4

1 回答 1

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);

这显然需要工作,因为如果无法将框架平均划分为您想要的任何范围,它将崩溃。

于 2013-10-22T07:38:07.900 回答