Select pixels from a matrix given the centers ?
1 次查看(过去 30 天)
显示 更早的评论
Suppose we have a given matrix (I) and a structure containing some centers of the matrix before.
For example:
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));
end
end
where n*n is the total number of centers.
This code works fine, but is there a faster way to implement it?
0 个评论
采纳的回答
DGM
2023-3-28
编辑:DGM
2023-3-28
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;
6 3;
4 5;
2 6]+1;
% 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))
0 个评论
更多回答(1 个)
Image Analyst
2023-3-26
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.
4 个评论
Image Analyst
2023-3-28
编辑:Image Analyst
2023-3-28
centerRow = ceil(size(m, 1)/2);
centerCol = ceil(size(m, 2)/2);
youWant = m(centerRow + 3, centerCol + 1)
To learn other fundamental concepts, invest 2 hours of your time here:
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!