Фильтровать значения из 3D-матрицы

Я почти уверен, что для этого должен быть способ MATLAB, но у меня мало опыта:

width=length(hsvSecond(:,1,1));
height=length(hsvSecond(1,:,1));
for i=1:width
    for j=1:height
        if(hsvSecond(i,j,2)>0.35)
            hsvSecond(i,j,1)=0;
            hsvSecond(i,j,2)=0;
            hsvSecond(i,j,3)=0;
        end    
    end
end

Итак, в основном, если значение hsvSecond(i,j,2) больше, чем число, я хочу установить hsvSecond(i,j,:) равным нулю.


person fersarr    schedule 26.09.2013    source источник


Ответы (1)


Вот простой однострочный:

hsvSecond(repmat(hsvSecond(:,:,2) > 0.35, [1,1,3])) = 0;

или эта, возможно, более эффективная альтернатива (хотя некоторые элементарные тесты предполагают обратное, что меня удивляет):

hsvSecond = bsxfun(@times, hsvSecond(:,:,2) <= 0.35, hsvSecond)

Некоторые комментарии к вашему коду:

width=length(hsvSecond(:,1,1));
height=length(hsvSecond(1,:,1));

Должно быть

width = size(hsvSecond,1)
height = size(hsvSecond,2)

а также

hsvSecond(i,j,1)=0;
hsvSecond(i,j,2)=0;
hsvSecond(i,j,3)=0;

можно было бы

hsvSecond(i,j,:)=0;
person Dan    schedule 26.09.2013