我有許多點排列在一個統一的網格狀時尚的集合。鑑於這些觀點,我如何檢測這個網格的屬性,比如它的旋轉,線條之間的間距等?如果有一些算法來擬合這些數據的許多平行和垂直線,那麼我可以平均線之間的距離,角度等等。做這個的最好方式是什麼?檢測網格方向和屬性
UPDATE: 我正在處理的數據看起來大致是這樣的:
這將是未來的清潔,但我只是需要一些方法來插值和分析網格狀圖案。
我有許多點排列在一個統一的網格狀時尚的集合。鑑於這些觀點,我如何檢測這個網格的屬性,比如它的旋轉,線條之間的間距等?如果有一些算法來擬合這些數據的許多平行和垂直線,那麼我可以平均線之間的距離,角度等等。做這個的最好方式是什麼?檢測網格方向和屬性
UPDATE: 我正在處理的數據看起來大致是這樣的:
這將是未來的清潔,但我只是需要一些方法來插值和分析網格狀圖案。
如果點被放置在一個網格,然後2個點之間的平方距離是 d ² ×(米 ² + Ñ ²)其中 d是網格常數(假設它是一個在兩個主方向上具有相同常數的二維矩形網格)和 m, n是定義兩點之間(仿射)差的整數(或者更簡單地說,兩個點之間的網格間隔的數量沿着「x」和「y」點軸)因此:
謝謝!這真的應該有所幫助。 – schmatz
如果您只有網格圖像,您可以嘗試使用「圖像處理工具箱」中的radon
函數。它會給你角度和氡的變換,你可以重新計算圖像上的點之間的距離。
下面是一個代碼樣本radon
功能
% First we generate a grid of points on image
ImgW = 400;
ImgH = 300;
DIdx = ImgH + round(rand(1)*ImgH/10);
ImgGrid = zeros(ImgH,ImgW);
ImgGrid(1:DIdx:end) = 1;
% Then we calculate radon transform
theta = 0:0.1:180;
[R,xp] = radon(ImgGrid,theta);
% Then we calculate standard deviation for each angle of R
Rstd = std(R);
% and find maximal value of std(R) columnwise
[RstdMax,RstdIdx] = max(Rstd);
ThMax = theta(RstdIdx);
% Now we show results
figure('Color','w');
subplot(2,2,1); imshow(ImgGrid);
axis on;
colormap(hot(255));
title('Grid image');
line(ImgW/2+[-1 +1]*min(ImgW,ImgH)/2*cosd(-ThMax), ...
ImgH/2+[-1 +1]*min(ImgW,ImgH)/2*sind(-ThMax), 'Color','y');
subplot(2,2,3); plot(xp,R(:,RstdIdx),'.-');
title(sprintf('Profile at %.2f deg (the yellow line)',ThMax));
subplot(2,2,2); imagesc(log10(R+1), 'Xdata',theta, 'Ydata',xp);
axis on;
colormap(hot(255));
xlabel('\theta (degrees)');
ylabel('x''');
subplot(2,2,4); plot(theta,Rstd,'.-');
title('std(R)');
但在一般情況下,這不會給你晶格矢量網格!這隻會給你點之間的距離,而不是。如果你需要格矢量,你必須重新計算它們。但如果你足夠幸運並且你的格子是長方形的......希望你得到了點; o)
如果你有點(x,y)的座標,你甚至會更幸運。 CST-Link提出的方法有些「太蠻力」。我寧願計算你的觀點的「結構因素」(參見http://en.wikipedia.org/wiki/Structure_factor和文章末尾的教程鏈接),並分析它的最大值。
謝謝!我會看看這:) – schmatz
網格是什麼樣子?如果它是矩形的,那麼解決方案將更容易。 – Justin
它確實是矩形的。我正在處理的數據看起來像這樣 http://www-personal.umich.edu/~schmatz/grid。jpg – schmatz
如果您實際上可以對網格進行形狀設置並確保其爲矩形,則左上角的點將是距離原點最近的距離(假定爲圖像的左上角)。右下角的點將是距離原點最遠的距離。你可以在這兩點之間形成一條線;離這條線最遠的點將是網格中的左下或右上點。用這些點可以計算網格的旋轉。你可以看到我是如何在我的答案中使用這個:http://stackoverflow.com/questions/15604485/sorting-2d-points-into-a-matrix/15604867#15604867 – Justin