Borrar filtros
Borrar filtros

How to: map selected entries of one matrix to entries of a second?

3 visualizaciones (últimos 30 días)
I have a matrix, A, of 1024x1280 elements(an image), and I have two mapping matrices, Row_map (670 X 1428) and Col_map (670 X 1428), that take element Row_map(1,1), Col_map(1,1) of A (i.e. element A(4,892) where Row_map(1,1)=4, Col_map(1,1)=892) and put that value into matrix R(1,1), where elements of R are a rotated subset of values in A. R is also 670 X 1428, and some entries of Row_map, Col_map and R are nans. (Specifically, it's just the corner of the image, rotated an arbitrary angle, but I think that's beside the point). Once I have this mapping, I will go through a series of matrices like A (a video), and perform the same mapping.
Currently I'm doing the silly thing of looping over row and column indices of Row_map and Col_map to enter each value of R. There has to be a more efficient way, but I'm blanking right now. Really appreciate your help.

Respuesta aceptada

Stephen23
Stephen23 el 2 de Abr. de 2018
Editada: Stephen23 el 2 de Abr. de 2018
Remove the NaN values, then use sub2ind:
isn = isnan(Row_map) | isnan(Col_map);
R = nan(size(isn));
idx = sub2ind(size(A),Row_map(~isn),Col_map(~isn));
R(~isn) = A(idx);
idx is the mapping that you need, into the non-NaN elements of R given by ~isn.

Más respuestas (1)

KSSV
KSSV el 2 de Abr. de 2018
Read about sub2ind, ind2sub.
R = NaN(size(Row_map)) ;
idx = sub2ind(size(A), Row_map(:),Col_map) ;
R(idx) = A(idx) ;
  1 comentario
Stephen23
Stephen23 el 2 de Abr. de 2018
Editada: Stephen23 el 2 de Abr. de 2018
This will not work: the indices in A (size 1024x1280) are clearly going to be different to those in R (size 670x1428).

Iniciar sesión para comentar.

Categorías

Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by