Как я могу эффективно найти все пиксели (u',v')
на расстоянии x
от заданного пикселя (u,v)
. В частности все (u',v')
такие, что sqrt((u-u')^2 +(v-v')^2) <= x
Как найти все пиксели на некотором расстоянии от заданного пикселя?
1
A
ответ
2
Чтобы найти все пиксели на расстоянии x
вы можете использовать эту индексацию трюк (для Манхэттенского расстояния)
u=10;v=10;
x=3.4;
pixels=img([floor(u-x) ceil(u+x)],[floor(v-x) ceil(v+x)]);
Однако, обратите внимание, что это добавит все пиксели, находится в пределах досягаемости, даже если это всего лишь часть пикселя! Например. (6,6) внутри!
Для евклидова расстояния, необходимо определить круг вокруг точки
[xi,yi]=meshgrid(1:size(img,1),1:size(img,2));
mask=sqrt((xi-u).^2+(yi-v).^2)<x; % or ceil(x)
pixel_values=img(mask);
[pixel_indices_u pixel_indices_v]=find(mask);
2
u = rand(1e2,1); % Create a 100 random points in the unit square
v = rand(1e2,1); % Create a 100 random points in the unit square
a = 0.3; % Choosen pixel
b = 0.4;
x = 0.1; % radius from the choosen pixel
idx = (sqrt((u-a).^2 +(v-b).^2) <= x); % Create a logical index array
locs = [u(idx) v(idx)]; % Index the locations
В основном это именно то, что вы описали в вопросе, с точками помечены как (u,v)
а «точка назначения», так сказать, помечена (a,b)
в виде простого ('
) обозначает комплексную сопряженную транспонирование в MATLAB.
Подробнее о логической индексации в this very insightful answer by Luis Mendo
его почти невозможно найти 'SQRT ((U-U ')^2 + (v-v')^2) = x' потому, что пиксели в целых точках! Если вы не интерполируете –
Да, вы правы. Я хотел спросить '<= x'. Я изменил вопрос. Извинения за путаницу –