Select pixels from a matrix given the centers ?
3 visualizzazioni (ultimi 30 giorni)
Suppose we have a given matrix (I) and a structure containing some centers of the matrix before.
In this case, I is a 9x9 matrix and we have the centers: a22, a63, a45, a26. Normally the number of centers is a square number.
Suppose we want to select all the pixels far from the centers of +1 position on the rows and +3 positions on the columns
The new matrix (A) will be:
My code is:
for c = 1:n
for r = 1:n
uno=Struttu.x(c + ( (r-1) * n));
due=Struttu.y(c + ( (r-1) * n));
A(r,c) = (I( uno +3 , due +1));
where n*n is the total number of centers.
This code works fine, but is there a faster way to implement it?
DGM il 28 Mar 2023
Modificato: DGM il 28 Mar 2023
For addressing scattered points, use sub2ind(). Here's an example.
% this is your array
M = reshape(0:99,10,10)
% these are the "centers" [row col]
% note that indexing is not zero-based in MATLAB
A = [2 2;
% get sizes
sz = size(M);
% these are the array values at those positions
Acenter = M(sub2ind(sz,A(:,1),A(:,2)))
% these are the array values at a given offset
% you'll have to decide how to handle cases where offset position
% is outside the array boundaries. I'm just clamping them.
offset = [3 1]; % [row col]
samplerows = min(max(A(:,1) + offset(1),1),sz(1));
samplecols = min(max(A(:,2) + offset(2),1),sz(2));
Aoffset = M(sub2ind(sz,samplerows,samplecols))
Più risposte (1)
Image Analyst il 26 Mar 2023
Yes, you can use meshgrid. Code is in the FAQ: https://matlab.fandom.com/wiki/FAQ#How_do_I_create_a_circle?
Your x and y have to be column and row indexes of course.
Let me know if you can't figure it out.