2016-11-06 132 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

相關問題