Я рекомендую использовать более матричный подход.MATLAB / Octave очень медленный при использовании циклов.
Например, скажем, я хочу создать изображение RGB, в котором пиксели, значения преобразования в градациях серого (0,3 * R + 0,6 * G + 0,1 * B) которых меньше или равны 128, установлены равными нулю:
# Read a 512x512 RGB image.
# Resulting matrix size is [512 512 3]
im = imread('lena_rgb.png');
# Compute grayscale value (could be done more accurately with rgb2gray).
# Resulting matrix size is [512 512 1] (same as [512 512])
grayval = 0.3*im(:,:,1) + 0.6*im(:,:,2) + 0.1*im(:,:,3);
# Create a bitmask of grayscale values above 128
# Contains 0 if less than or equal than 128, 1 if greater than 128
# Resulting matrix size is [512 512 1] (same as [512 512])
mask = (grayval > 128);
# Element-wise multiply the mask with the input image to get the new RGB image
# Resulting matrix size is [512 512 3]
result = im.* repmat(mask, [1 1 3]);
Я рекомендую узнать больше о матричной манипуляции, арифметике и адресации в Октаве .Я включил оригинал и результат изображения моего примера для справки.