2016-11-06 64 views
1

我有一个200x200 * 3的图像,我应该通过使用linspace Matlab函数来找到图像中每个像素的x和y。 我已经使用了网格功能,用下面的代码:如何使用linspace matlab函数获取图像中所有像素的y值?

Ny=200; % # pixels in y direction 
Nx=200; % # pixels in x direction 
resolution=1; % size of a pixel 
img=rand(Ny,Nx,3); % random image 
y=(img(1:Ny))*resolution-resolution/2; 
x=(img(1:Nx))*resolution-resolution/2; 
[x,y]=meshgrid(x,y); 

但我的上司告诉我要使用的功能linspace,我无法理解how.Can有人帮我请

+2

使用'ndgrid'(或'meshgrid')会更容易。有什么特别的原因需要使用'linspace'吗? – beaker

+0

事实上,我已经使用了以下代码的网格网格函数:'Ny = f; y方向的%#像素 Nx = f; x方向上的%#个像素 分辨率= 1; %像素大小 img = rand(Ny,Nx,3); %随机图像 y =(img(1:Ny))*分辨率分辨率/ 2; x =(img(1:Nx))*分辨率分辨率/ 2; [x,y] = meshgrid(x,y);'但是我的主管告诉我要使用函数linspace,但我不明白怎么做。这就是为什么我要求帮助 –

+0

为什么你减去'分辨率/ 2'?期望值的范围是什么? 'img(1:Ny)* resolution'也是不正确的,它应该是'1:resolution:Ny'。 – beaker

回答

2

唯一的原因,我可以想象你的主管要你使用linspace是为了创建xy载体输入meshgrid。仅仅linspace不足以生成所有的像素坐标,因此您必须使用meshgrid,ndgrid,repelemrepmat

linspace对简单地执行诸如1:resolution:Ny的一个优点是linspace确保端点总是出现在范围内。例如,如果你这样做

>> 1:.37:4 
ans = 
    1.0000 1.3700 1.7400 2.1100 2.4800 2.8500 3.2200 3.5900 3.9600 

你没有得到4作为最后一点。但是,如果你使用linspace

>> linspace(1,4,9) 
ans = 
    1.0000 1.3750 1.7500 2.1250 2.5000 2.8750 3.2500 3.6250 4.0000 

的间距自动调整,使最后一个元素4

所以假设resolution是你想要的点数倍增,为2你想401均匀分布的点,并为1/2你想101点,您的代码会是这个样子:

x_points = linspace(1, Nx, Nx*resolution+1); 
y_points = linspace(1, Ny, Ny*resolution+1); 

(我仍然不知道什么是resolution/2部分是应该做的,所以我们需要澄清。)

然后,你会通过那些meshgrid

[X,Y] = meshgrid(x_points, y_points); 
+0

这里的分辨率是物理尺寸或面积被一个像素占用。例如,如果200 x 200像素图像的物理尺寸为2米x 2米,则分辨率必须调整为分辨率= 2。如果图片的大小为2m x 3m(因此它是矩形的),分辨率x = 2,分辨率= 3。 –

+0

这仍然不能告诉我网格发生了什么。你要留下很多信息。一个例子会有所帮助。 – beaker

相关问题