Tengo una sección de código que encuentra las esquinas de Harris en una secuencia de imágenes. Necesito hacer esto para 92 imágenes, pero es bastante lento. Como tal, me gustaría ejecutar el código en paralelo. El código que tengo a continuación tiene un error relacionado con las "esquinas" variablesMATLAB parfor slicing issue?
%% Harris corners
max_pts = 900;
corners = zeros(max_pts,2,size(images,3));
parfor i = 1:size(images,3)
I = images(:,:,i);
[y x] = get_corners(I,max_pts);
corners(1:length(y),:,i) = [y x];
end
que dice:
MATLAB ejecuta bucles en funciones parfor dividiendo las iteraciones del bucle en grupos, y luego enviarlos a los trabajadores de MATLAB donde corren en paralelo. Para que MATLAB haga esto de manera repetible y confiable, debe ser capaz de clasificar todas las variables utilizadas en el ciclo. El código usa la variable indicada de una manera que es incompatible con la clasificación. Acción sugerida Soluciona el uso de la variable indicada. Para obtener más información acerca de la clasificación de variables y otras restricciones en las iteraciones de bucle de parfor, consulte "Clasificación de variables" en la documentación de Parallel Computing Toolbox.
¿Alguna idea de cómo solucionar esto?
Gracias!
¿es posible ampliar esta a n dimensiones para la matriz imágenes?Supongamos que especifica a la función que corte sobre la dimensión Mth para que obtenga la imagen (:,:, 1,1,1,1,:, 1,1,1) donde el tercer punto está en la posición Mth. – Leo
@Leo: no el corte siempre estará en la última dimensión. Sin embargo, con 'permute', puede mover las dimensiones según sea necesario. – Jonas