Я рекомендую использовать более ориентированный на матрицу подход. MATLAB/Octave работает очень медленно при использовании петель.
Например, скажем, я хочу создать RGB изображение, где пиксели, чьи оттенки серого преобразования значения (0.3 * R + 0,6 * G + 0,1 * В) меньше или равно 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]);
Я рекомендую узнать больше о матричной манипуляции, арифметике и адресации в Octave. Я включил оригинальные и результирующие изображения моего примера для справки.
Насколько мне известно, это невозможно сделать в Октаве. Но все равно спасибо. – OctaveNoob
Вы можете всегда взаимодействовать с кодом C++ по соображениям производительности. – Ross
Извините, но проект должен быть выполнен в Octave. Мое текущее решение работает достаточно хорошо, но оно очень медленное. Я думаю, что мне нужно сделать некоторую кодировку вектора, но я просто не знаю, как это сделать. – OctaveNoob