【问题标题】:Matlab imcrop returns an image size zeroMatlab imcrop 返回图像大小为零
【发布时间】:2014-09-25 11:07:54
【问题描述】:

我正在尝试使用 imcrop 对图像进行采样,但我遇到了问题。

patchsize = 35
[sample_width, sample_height] = size(sample);
max_width = sample_width-patchsize;
max_height = sample_height-patchsize;
x = randi([0, max_width]);
y = randi([0, max_height]);
patch = imcrop(sample,[x y patchsize-1 patchsize-1]);

我的代码的下一部分是尝试访问补丁中的像素,但出现错误:尝试访问补丁(1,1);索引超出范围,因为 size(patch)=[0,0]

所以我补充说,

disp(size(patch))

显然补丁的大小是 0 0,但我不明白为什么会这样。根据对堆栈溢出上 imcrop 的其他问题的回答,我也尝试过

patch = imcrop(sample, [x y x+patchsize-1 y+patchsize-1])

这也导致补丁大小为零

注意:大小并不总是返回零,在第一种情况下,取决于随机整数 x 和 y 是什么,patch 有时会有大小 patchsize,但它没有发生 %100 的时间,并且在第二个例子,有时它的尺寸会很全,但我不明白这种不一致来自哪里。

更新:问题出在我的代码部分:

[sample_width, sample_height] = size(sample);

应该是:

sample_width, sample_height, depth] = size(sample);

【问题讨论】:

  • 这可能不是错误的原因,但由于 size(...) 将行数作为第一个输出,你不应该在代码的第二行切换 sample_width 和 sample_height 吗?
  • 谢谢你,你肯定是对的,不幸的是在这种情况下它是一个方形图像,所以不是错误的来源
  • 哦,拍摄。只是出于好奇,样本的大小是多少?
  • 检查我的答案我认为您只需要为裁剪的图像使用补丁以外的其他名称
  • 192X192,所以 max_width/height 为 157

标签: matlab image-processing


【解决方案1】:

原代码的问题在:

[sample_width, sample_height] = size(sample);

应该是:

[sample_height, sample_width, sample_depth] = size(sample);

RGB 图像有 3 个维度,如上声明将赋予 sample_height 更大的值,以考虑宽度和深度

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多