Как рассчитать стандартное отклонение для каждого блока изображения

Я пытаюсь использовать этот пример из документации для вычисления стандартного отклонения для каждого блока пикселей 8x8 в изображении, но в этом случае я не могу использовать его должным образом, поэтому кто-нибудь может помочь мне вычислить std для каждого блока.

 fun = @(block_struct) std2(block_struct.data) * ones(size(block_struct.data))
 I2 = blockproc('moon.tif',[8 8],fun);
 figure;
 imshow('moon.tif');
 figure;
 imshow(I2 , []);

person user2815337    schedule 26.09.2013    source источник
comment
Привет, в будущем вы можете просто отредактировать свой предыдущий вопрос, а не задавать его повторно. У этого есть больше деталей, поэтому я собираюсь проголосовать, чтобы закрыть ваш предыдущий.   -  person Dan    schedule 26.09.2013
comment
Кроме того, что именно не так с вашим кодом? Что не так с результатом, который вы получаете?   -  person Dan    schedule 26.09.2013


Ответы (1)


Я подозреваю, что вы хотите nlfilter (или colfilt с опцией 'sliding'). С помощью blockproc изображение разбивается на отдельные блоки, которые не перекрываются, и записывается блоками, повторяя рассчитанное значение стандартного отклонения. С nlfilter это скользящее окно, поэтому вы получаете плавное выходное изображение.

Синтаксис nlfilter отличается, поэтому он будет применяться следующим образом:

Iout = nlfilter(imread('moon.tif'),[8 8],@std2);

Кроме того, вы можете использовать colfilt для повышения производительности:

Iout = colfilt(double(imread('moon.tif')),[8 8],'sliding',@std);
person chappjc    schedule 26.09.2013
comment
это хорошая работа, но все же я не могу заменить @std2 реальной функцией, извините, я не знаю, как - person user2815337; 30.09.2013
comment
В этом случае нет никакой разницы, но вы можете использовать blockfilt, как указано выше. - person chappjc; 30.09.2013