我正在尝试使用label2rgb生成RGB标签切片并使用它来更新RGB卷,如下所示:
labelRGB_slice=label2rgb(handles.label(:,:,handles.current_slice_z), 'jet', [0 0 0]);
handles.labelRGB(:,:,handles.current_slice_z) = labelRGB_slice;
我收到以下错误:
**Assignment has more non-singleton rhs dimensions than non-singleton subscripts**
Error in Tesis_GUI>drawSeedButton_Callback (line 468)
handles.labelRGB(:,:,handles.current_slice_z) = labelRGB_slice;
调试时我得到了这个:
size(labelRGB_slice)
ans =
160 216 3
K>> size(handles.labelRGB(:,:,handles.current_slice_z) )
ans =
160 216
我声明了handle.labelRGB:
handles.labelRGB = zeros(dim(1), dim(2), dim(3), 3);
所以我不明白指数的差异。
如何使切片分配有效?
答案 0 :(得分:6)
根据您声明handles.labelRGB
的方式,它是一个大小为[160 216 3 3]
的4D数组,但是您使用handles.labelRGB(:,:,handles.current_slice_z)
将其编入索引为3D数组,这意味着matlab将使用{{3}最后两个维度。因此,如果handles.current_slice_z = 5
,则返回handles.labelRGB(:,:,2,2)
,这是一个大小为[160 216]
的矩阵。因此,根据handles.current_slice_z
的含义,您需要使用
handles.labelRGB(:,:,:,handles.current_slice_z) = labelRGB_slice;
或
handles.labelRGB(:,:,handles.current_slice_z,:) = labelRGB_slice;