Я думаю, что проблема в том, что B
, скорее всего, 3-D RGB-изображение , и вы пытаетесь назначить его для одной 2-D плоскости вашей 3-D матрицы Train_Dat
. Если вы пытаетесь собрать набор трехмерных изображений для использования в качестве обучающих данных, вам придется сделать Train_Dat
либо 4-мерную матрицу (если все ваши изображения имеют одинаковые размеры), либо массив ячеек (с одним изображением на ячейку):
Пример # 1: 4-D матрица ...
nRows = 100; %# The number of rows in the images
nCols = 100; %# The number of columns in the images
nDepth = 3; %# The depth of the images (3 color planes for RGB images)
nImages = 5; %# The number of images you will use
Train_Dat = zeros(nRows,nCols,nDepth,nImages); %# Initialize to zeros
Train_Dat(:,:,:,1) = B; %# Assign B as the first image
Если вы хотите использовать эту опцию, но все ваши изображения не одного размера, вам придется изменить их размер до заданного размера. Один из способов сделать это, если у вас есть Toolbox для обработки изображений , это использовать функцию IMRESIZE :
newSize = [40 40]; %# The new size the image will be
C = imresize(B,newSize); %# Resize image B
Если у вас нет доступа к панели инструментов обработки изображений, можно использовать функцию INTERP2 для изменения размера изображения. Вот один пример изменения размера 3-D RGB-изображения типа UINT8 :
B = double(B); %# Convert B to double (needed to use INTERP2)
[nRows,nCols,nDepth] = size(B); %# Get the old image size
C = zeros(40,40,3,'uint8'); %# Initialize the new 3-D 40-by-40 uint8 image
xi = linspace(1,nCols,40); %# Create a down-sampled set of x points
yi = linspace(1,nRows,40); %# Create a down-sampled set of y points
[X,Y] = meshgrid(xi,yi); %# Create 40-by-40 grids of x and y points
C(:,:,1) = interp2(B(:,:,1),X,Y,'spline'); %# Interpolate the red color plane
C(:,:,2) = interp2(B(:,:,2),X,Y,'spline'); %# Interpolate the green color plane
C(:,:,3) = interp2(B(:,:,3),X,Y,'spline'); %# Interpolate the blue color plane
Изображение C
теперь будет уменьшенной выборкой 40 * 40 B
.
Пример # 2: массив ячеек ...
nImages = 5; %# The number of images you will use
Train_Dat = cell(1,nImages); %# Initialize the cell array
Train_Dat{1} = B; %# Assign B as the first image
В этом случае изображения, добавляемые в каждую ячейку, могут иметь разные размеры и типы, поэтому изменение размера не требуется.