2013-09-26 5 views
1

Я почти уверен, что должен быть способ MATLAB для этого, но у меня нет большого опыта работы:значения фильтров из 3D-матрицы

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,:) в ноль.

ответ

3

Вот простой один вкладыш:

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; 
+0

+1: Ваш ответ появился, прежде чем я представить мое :-) –