Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在我的matlab代码中修复这些错误?_Matlab_Image Processing - Fatal编程技术网

如何在我的matlab代码中修复这些错误?

如何在我的matlab代码中修复这些错误?,matlab,image-processing,Matlab,Image Processing,我正在尝试堆叠2D图像以获得3D效果,就像 我的原始代码有一些错误,有人建议使用下面的代码 M = zeros(25, 50, 8); for k = 1:8 img = imread(sprintf('%d-0000.jpg', k + 30)); img = imresize(img, [25 50]); img = im2double(rgb2gray(img)); % Convert to double format M(:, :, k) = img;

我正在尝试堆叠2D图像以获得3D效果,就像

我的原始代码有一些错误,有人建议使用下面的代码

M = zeros(25, 50, 8);
for k = 1:8
    img = imread(sprintf('%d-0000.jpg', k + 30));
    img = imresize(img, [25 50]);
    img = im2double(rgb2gray(img));  % Convert to double format
    M(:, :, k) = img;
end
hf2 = figure ;
hs = slice(M,[],[],1:8) ;
shading interp
set(hs,'FaceAlpha',0.8);
这是预期的结果

这就是我得到的错误

使用rgb2gray>解析_输入时出错(第81行)
映射必须是一个m x 3数组

rgb2gray中的错误(第35行)
X=解析_输入(varargin{:})

stack2中的错误(第9行)
img=im2double(rgb2gray(img));%转换为双格式


您编写的代码是为使用而设计的。但是,您工作区的屏幕截图表明,并非所有图像都符合该标准。当
k
为3时,
img
是一个二维矩阵,这意味着文件“33-0000.jpg”中的图像已经是一个或一个,您没有加载相关地图

要解决这个问题,您需要在加载图像时向循环中添加一些额外的逻辑,以便识别图像类型以及如何正确转换图像。具体来说,您需要检查图像数据的颜色,以及是否返回关联的颜色映射。然后你可以根据需要申请。例如:

for k = 1:8
  [img, cmap] = imread(sprintf('%d-0000.jpg', k + 30));
  if ~isempty(cmap)         % There is a colormap, so it's indexed
    img = ind2gray(img, cmap);
  elseif (ndims(img) == 3)  % 3 dimensions, so it's RGB
    img = rgb2gray(img);
  end
  M(:, :, k) = imresize(im2double(img), [25 50]);  % Convert to double and resize
end

您编写的代码是为使用而设计的。但是,您工作区的屏幕截图表明,并非所有图像都符合该标准。当
k
为3时,
img
是一个二维矩阵,这意味着文件“33-0000.jpg”中的图像已经是一个或一个,您没有加载相关地图

要解决这个问题,您需要在加载图像时向循环中添加一些额外的逻辑,以便识别图像类型以及如何正确转换图像。具体来说,您需要检查图像数据的颜色,以及是否返回关联的颜色映射。然后你可以根据需要申请。例如:

for k = 1:8
  [img, cmap] = imread(sprintf('%d-0000.jpg', k + 30));
  if ~isempty(cmap)         % There is a colormap, so it's indexed
    img = ind2gray(img, cmap);
  elseif (ndims(img) == 3)  % 3 dimensions, so it's RGB
    img = rgb2gray(img);
  end
  M(:, :, k) = imresize(im2double(img), [25 50]);  % Convert to double and resize
end

可能重复的问题,请不要发布相同的问题两次。相反,编辑您的第一个问题以正确解释您的问题。一个摆好姿势的问题最终会得到回答。我这么说是因为它与你在另一个问题上的截图完全相同。请复制粘贴错误消息,不要使用文本图像,它们不可搜索,也不是每个人都可以从图像中读取。另见。我无法重现你的问题,因为我没有你的数据。这意味着我只能猜测问题可能是什么,这不利于写答案。这就是为什么你对你的另一个问题只有评论。对于你的另一个问题,你从gnovice那里得到了一些非常好的建议:“从文件加载的图像必须是三维RGB图像,代码才能工作。根据您添加的屏幕截图,您的第三个图像33-0000.jpg可能是索引彩色图像,这意味着您必须使用ind2gray进行转换。”以及“因为您必须加载图像和贴图,并将其传递给ind2gray。”(有正确的格式和相关示例的链接,我懒得复制这些,去看看那些链接!!!)这实际上是
ind2gray
文档中的第一个示例。它向您展示了如何从
imread
中获取两个值,并将它们放入
ind2gray
中。可能重复的问题请不要发布两次相同的问题。相反,编辑第一个问题以正确解释您的问题。一个摆好姿势的问题将被忽略我最终没有回答。我说了上面的问题,因为它与你在另一个问题上的截图完全相同。请复制粘贴错误消息,不要使用文本图像,它们不可搜索,也不是每个人都可以从图像中读取。也请看。我无法重现你的问题,因为我没有你的数据。这意味着我只能查看这就是为什么你对你的另一个问题只有评论。对于你的另一个问题,你从gnovice那里得到了一些非常好的建议:“从文件加载的图像必须是三维RGB图像,代码才能工作。根据您添加的屏幕截图,您的第三个图像33-0000.jpg可能是索引彩色图像,这意味着您必须使用ind2gray进行转换。”以及“因为您必须加载图像和贴图,并将其传递给ind2gray。”(附带了正确的格式和相关示例的链接,我懒得复制这些,去看看那些链接!!!)这是
ind2gray
文档中的第一个示例。它向您展示了如何从
imread
中获取两个值,并将它们放入
ind2gray