【问题标题】:averaging images, code doesn't work平均图像,代码不起作用
【发布时间】:2017-11-25 05:51:59
【问题描述】:

我有这个 matlab 代码来创建几个图像的平均值: cd('C:\images')

all_images=dir('*.jpg');
[sj,xx]=size(all_images);
j=1;
file_name=char(all_images(j).name);
tmp=imread(file_name);
[m,n]=size(tmp);
template=zeros(m,n);

for i=1:length(all_images)
    file_name=char(all_images(i).name);
    tmp=double(imread(file_name));
    template=template+tmp;
end

template=template/length(all_images);

imagesc(template)

imwrite(uint8(template),'template.jpg','jpg')

情况是我得到以下错误:

错误

使用+矩阵尺寸必须一致。

错误

在平均模板中(第 15 行)模板=模板+tmp;

有什么想法吗?不得不说我是matlab编码的新手。

谢谢

【问题讨论】:

  • 您确定您的文件包含相同大小的图像吗?这可能是你的问题。
  • 是的,所有图像的大小都相同

标签: matlab


【解决方案1】:

只需将第 6 行中的 [m,n]=size(tmp) 更改为 [m,n,~]=size(tmp) 即可解决您的问题。

在下面的代码中:

[m,n]=size(tmp)

Matlab 将 n*3 计算为矩阵的列,因此您将在接下来的几行中得到 dimension 错误。

【讨论】:

  • 它在我的系统中运行良好。你有同样的错误吗?
  • 完全一样。你用的是哪个版本的matlab?
  • @unomas83 - Matlab2017a。我的朋友没关系。
  • @unomas83 _ 在第 6 行设置断点并运行代码,然后单击编辑器菜单中的步骤。当你到达第 7 行时,在命令窗口中获取 tmp 的大小以检查它是否计算错误。
  • @unomas83- template = zeros(m,n,3) 也这样做。
【解决方案2】:

您正在用此处似乎是单个值的内容覆盖您的临时变量:

tmp=double(imread(file_name));

不管怎样,它可能是不同的尺寸 M x N。 Matlab 说要添加矩阵,它们必须具有相同的行数和列数。

【讨论】:

    猜你喜欢
    • 2016-07-02
    • 2018-10-17
    • 2017-11-13
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多