我正在尝试使用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,但我不明白为什么会这样。根据有关堆栈溢出的其他问题的答案,我也尝试了
patch = imcrop(sample, [x y x+patchsize-1 y+patchsize-1])
这也导致补丁的大小为零
注意:大小并不总是返回零,在第一种情况下,取决于随机整数x和y是什么,补丁有时会有大小补丁大小,但它没有发生%100的时间,并且在第二个例子,它有时会有大小全面,但我无法理解这种不一致的来源。
更新:问题来自我的代码部分:
[sample_width, sample_height] = size(sample);
应该是:
sample_width, sample_height, depth] = size(sample);
答案 0 :(得分:1)
原始代码的问题在于:
[sample_width, sample_height] = size(sample);
应该是:
[sample_height, sample_width, sample_depth] = size(sample);
RGB图像有3个维度,如上所述声明会给sample_height一个更大的值来说明宽度和深度