获取图像中矢量的所有像素坐标
我有一个强度/灰度图像,我选择了这个图像中的一个像素。 我想从所有方向/角度的这个像素开始发送矢量,并且我想对所有矢量求和所有接触一个矢量的像素的强度。
经过这一步之后,我想绘制一个轴上的强度和另一个轴上的角度的直方图。 我想我可以自己做最后一步,但我不知道如何在我的灰度图像中创建这些矢量,以及如何获取矢量触摸的像素坐标。
我以前在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