Estoy haciendo extracción de características de una imagen en Matlab. Tengo que aplicar muchas funciones a través de ventanas nXn para este propósito (por ejemplo, para encontrar la varianza sobre cada ventana de 3X3, etc.
¿Hay alguna manera fácil y eficiente de hacer esto en Matlab aparte de hacer un bucle sobre la matriz y recolectando los elementos de ventana cada vez?
Para algunas funciones, he podido encontrar una máscara equivalente y las he aplicado usando filter2, pero para muchas otras no parece tener tanto lujo (un buen ejemplo: mediana de una ventana de 3x3).
Lo que quiero es algo como arrayfun, sino algo que se aplica a las ventanas nXn, no elementos individuales.
Gracias,
Sundar¿Cómo aplicar ventanas móviles a una matriz 2D en MATLAB?
Respuesta
Si usted tiene la caja de herramientas de procesamiento de imágenes, puede utilizar blkproc para procesar nxm bloques de la imagen utilizando funciones definidas personalizado. Aquí está un ejemplo
function Ip = imageProcessed(II,blockSize)
% FUNCTION imageProcessed calculates average value of blocks of size nxm
% blocks
if nargin<2,
% default/example value for block size
blockSize = [3 4];
end
if size(II,3)>1,
% blkproc requires a grayscale image
% convert II to gray scale if it is RGB.
II=rgb2gray(II)
end
% Custom average function.
myAveFun = @(x) ones(size(x))*sum(x(:))/length(x(:));
% use blkproc to process image
Ip = blkproc(II,[blockSize(1), blockSize(2)],myAveFun);
end
Nota:
A partir de la imagen de MATLAB 2009b Processing Toolbox, blkproc se depcrecated y se reemplaza con blockproc (ver sección R2099b here). Por lo tanto, las dos últimas líneas podrían cambiarse a:
myAveFun = @(blkstrct) ones(size(blkstrct.data))*mean(blkstrct.data(:))
Ip = blockproc(II,blockSize,myAveFun);
Gracias, tengo la caja de herramientas de procesamiento de imágenes y eso es exactamente lo que necesitaba. – sundar
su bienvenida. Me alegro de que ayudó. – Azim
La ayuda para esta función me indicó 'colfilt'. Resulta colfilt con una ventana 'deslizante' hace que mi trabajo sea aún más fácil. Gracias por abrirme esta nueva serie de funciones. – sundar
- 1. Producir matriz 2D de una matriz 1D en MATLAB
- 2. ¿Cómo puedo aplicar una función a cada fila/columna de una matriz en MATLAB?
- 3. Matriz de Python a MATLAB
- 4. Cómo aplanar matriz 2D a matriz 1D?
- 5. ¿Cómo devolver una matriz 2D a una función en C?
- 6. Cálculo de una matriz de transformación 2D a partir de una matriz 2D inicial y resultante
- 7. Asignar una matriz 2D a una matriz 1D
- 8. ¿Cómo creo una matriz 2D en Perl?
- 9. Transponer una matriz 2D
- 10. cómo acceder a los elementos en una matriz 2D?
- 11. ¿Cómo pasar una matriz 2D dinámicamente asignada a una función?
- 12. ¿Asigna explícitamente valores a una matriz 2D?
- 13. Cómo pasar matriz 2D (matriz) en una función en C?
- 14. numpy: aplicar argsort a una matriz
- 15. Cómo aplicar un O lógico a una matriz en Excel
- 16. ¿Cómo hacer que MATLAB muestre el índice del valor mínimo en una matriz 2D?
- 17. ¿Cómo resolver una matriz en MATLAB?
- 18. ¿Cómo se muestra una matriz en MATLAB?
- 19. ¿Cómo hacer una matriz nubosa 2d una matriz 3d?
- 20. Cómo asignar una dimensión de una matriz 2D a una nueva matriz 1d en VBA
- 21. Convertir una matriz 1D en una matriz 2D en numpy
- 22. ¿Cómo obtengo las dos últimas dimensiones de una matriz N-D como una matriz 2D?
- 23. Convierte una matriz 2D en una matriz de 1D
- 24. ¿Cómo pasar una matriz 2D a un procedimiento Almacenado?
- 25. Dividir una matriz en MATLAB
- 26. Convertir una matriz numpy 2D en una matriz estructurada
- 27. Atravesar una matriz F # 2D
- 28. Cómo rotar una matriz 2D de enteros
- 29. Aplicar una función a todos los valores en una matriz
- 30. Aplicar una función a una matriz de distancia en R
Puede ser útil si puede actualizar la pregunta y enumerar las operaciones específicas que desea aplicar a los elementos de ventana. Puede haber formas de convertirlos a todos en máscaras/elementos de filtro para usar con FILTER2 (o posiblemente CONV2). – gnovice
¿tiene la caja de herramientas de procesamiento de imágenes? – Azim