获取图像中矢量的所有像素坐标

我有一个强度/灰度图像,我选择了这个图像中的一个像素。 我想从所有方向/角度的这个像素开始发送矢量,并且我想对所有矢量求和所有接触一个矢量的像素的强度。

经过这一步之后,我想绘制一个轴上的强度和另一个轴上的角度的直方图。 我想我可以自己做最后一步,但我不知道如何在我的灰度图像中创建这些矢量,以及如何获取矢量触摸的像素坐标。

我以前在C ++中这样做,这需要很多代码。 我相信这可以在MATLAB中花费更少的精力完成,但是我对MATLAB很新颖,所以任何帮助都会被赞赏,因为我没有在文档中找到任何有用的帮助。


它可能不是解决问题的最好方法,但是你可以用一些代数来做,如何...
我们知道通过点(a,b)的角度θ的直线斜率公式是:

y = tan(theta) * (x-a) + b

因此,一个简单的想法是计算所有常量的这条线与y = const的交点,并读取交点处的强度值。 你会在所有角度重复这个...
一个示例代码来说明这个概念:

%% input
point = [128 128];               % pixel location
I = imread('cameraman.tif');     % sample grayscale image

%% calculations
[r c] = size(I);
angles = linspace(0, 2*pi, 4) + rand;
angles(end) = [];
clr = lines( length(angles) );   % get some colors

figure(1), imshow(I), hold on
figure(2), hold on

for i=1:length(angles)
    % line equation
    f = @(x) tan(angles(i))*(x-point(1)) + point(2);

    % get intensities along line
    x = 1:c;
    y = round(f(x));
    idx = ( y<1 | y>r );        % indices of outside intersections
    vals = diag(I(x(~idx), y(~idx)));

    figure(1), plot(x, y, 'Color', clr(i,:))    % plot line
    figure(2), plot(vals, 'Color', clr(i,:))    % plot profile
end
hold off

这个例子与Amro的类似,但它是一个稍微不同的实现,它应该适用于分配给图像的任意坐标系。

让我们假设你有矩阵规则间隔的x和y坐标与图像大小相同,这样像素(i,j)的坐标由(x(i,j),y(i,j)) 。 作为一个例子,我将使用MESHGRID创建一个样本5乘5整数坐标:

>> [xGrid,yGrid] = meshgrid(1:5)

xGrid =

     1     2     3     4     5
     1     2     3     4     5
     1     2     3     4     5
     1     2     3     4     5
     1     2     3     4     5

yGrid =

     1     1     1     1     1
     2     2     2     2     2
     3     3     3     3     3
     4     4     4     4     4
     5     5     5     5     5

接下来,我们可以通过选择常量的一些值并使用网格的x坐标计算y来定义通过坐标系的y = m*(x - a) + b

>> a = 0;
>> b = 1;
>> m = rand

m =

    0.5469

>> y = m.*(xGrid(1,:)-a)+b

y =

    1.5469    2.0938    2.6406    3.1875    3.7344

最后,我们发现网格中的y点与上面计算的点不同,小于网格大小:

>> index = abs(yGrid-repmat(y,size(yGrid,1),1)) <= yGrid(2,1)-yGrid(1,1)

index =

     1     0     0     0     0
     1     1     1     0     0
     0     1     1     1     1
     0     0     0     1     1
     0     0     0     0     0

并使用这个索引矩阵来得到该行所穿过像素的x和y坐标:

>> xCrossed = xGrid(index);
>> yCrossed = yGrid(index);
链接地址: http://www.djcxy.com/p/89763.html

上一篇: Getting all pixel coordinates of a vector inside a image

下一篇: Access pixel values within a contour boundary using OpenCV in Python