Я пытаюсь взять образец изображения с помощью imcrop, но у меня возникают проблемы.Matlab 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); индекс вне границ, потому что размер (патч) = [0,0]
поэтому я добавил,
disp(size(patch))
по-видимому, размер патча 0 0, но я не понимаю, почему это так. На основании ответов на другие вопросы о imcrop на переполнение стека, я также попытался
patch = imcrop(sample, [x y x+patchsize-1 y+patchsize-1])
Это также привело к пластыря, имеющего размер нулевой
примечание: размер не всегда возвращает ноль, в первом случае, в зависимости от на том, что были случайные ints x и y, патч иногда имел размер патчей, но этого не произошло,% 100 времени, а во втором примере оно иногда имело размеры, которые были по всему борту, но я не могу понять откуда эта несогласованность.
Update: проблема исходит от той части моего кода:
[sample_width, sample_height] = size(sample);
должен был:
sample_width, sample_height, depth] = size(sample);
Это не может быть причиной ошибки, но так как размера (...) дает число строки как первый вывод, не следует ли вам переключаться sample_width и sample_height во вторую строку вашего кода? –
Спасибо, вы определенно правы, к сожалению, в этом случае это квадратное изображение, поэтому не источник ошибки – user3325965
oh shoot. Каков размер образца только из любопытства? –