2013-08-16 281 views
1

Matlab中的簡單圓角矩形碼可寫成如下形式。圓角矩形座標表示

rectangle('Position',[0,-1.37/2,3.75,1.37],... 
     'Curvature',[1],... 
    'LineWidth',1,'LineStyle','-') 
daspect([1,1,1]) 

如何獲取此圖的x和y座標數組?

+0

你需要澄清你的問題;矩形的x和y座標是由'rectangle'命令給出的嗎?或者你在問別的嗎? – jazzbassrob

+0

看到'rectangle'函數的幫助文本,我碰到了一句話:「RECTANGLE對象不會在軸上顯示[0 90]以外的視角」。這使我相信它使用某種特殊的渲染,而不是情節。所以,你可能無法獲得x和y座標。 – radarhead

+0

我需要得到兩組座標x和y,它們將繪製相同的圖形,即該圓角矩形的所有點的座標。 – bordart

回答

1

要獲得的軸單元界限,做到:

axisUnits = axis(axesHandle) % axesHandle could be gca 

axisUnits將是四個元件陣列,使用以下語法:[xlowlim xhighlim ylowlim yhighlim],它也將包含ZLOW和zhigh 3-d圖。

但我認爲這不是你需要知道的。檢查MATLAB文檔的rectangle properties,我們發現:

位置四元素矢量[X,Y,寬度,高度]

位置和矩形的大小。指定軸的數據單位中矩形的位置和大小。由x,y 定義的點指定矩形的一個角,寬度和高度分別沿着x軸和y軸定義沿單位的尺寸爲 的尺寸。

據也記錄在rectangle documentation

矩形( '位置',[X,Y,W,H])從點x,y 和具有寬度繪製矩形的w和h的高度。在軸數據中指定值 單位

看看這是否說明你想要的。你有一個從-100到100的x軸和從5到15的y軸。假設你想在-x中放置一個從-30到-20的矩形,在y中放置一個從8到10的矩形。

rectangle('Position',[-30,8,10,2]); 
+0

感謝您的努力,但我仍然沒有線索,如何導出此圖的點的座標。可能沒有簡單的方法來實現這一點,我不得不尋找替代解決方案。如果我錯過了一些東西,如果你能解釋我,我將非常感激。 – bordart

+0

@artalexan對不起,其實我誤解了matlab文檔。您將矩形位置直接放置在軸單位中。增加了一個例子,希望你能設法使用它! – Werner

0

正如評論解釋似乎是通過查詢創建rectangle圖,並提取x/y座標沒有直接的方法。另一方面,我可以想到兩個簡單的策略來獲得座標,這些座標將密切重現用矩形生成的曲線:

(1)將圖保存爲圖像(例如.png)並處理圖像以提取點對應的曲線。一定程度的按摩是必要的,但是如果鈍的話,這是相對簡單的,並且我期望代碼在執行時比從軸對象獲得數據稍微慢一些。 (2)編寫自己的代碼,繪製一個帶有彎曲邊的矩形。雖然重新創建matlab的繪製可能並不那麼簡單,但您可能會對自己的版本感到滿意。 (a)你認爲執行的速度是多少(b)你需要複製在屏幕上繪製什麼樣的密切程度(c)你是否有圖像處理例程,比如說讀取圖像文件。

編輯

如果您有圖像處理工具箱,你可以在一組表示矩形點如下得出:

h=rectangle('Position',[0,-1.37/2,3.75,1.37],... 
     'Curvature',[1],... 
    'LineWidth',1,'LineStyle','-') 
daspect([1,1,1]) 
axis off 
saveas(gca,'test.png'); 
im = imread('test.png'); 
im = rgb2gray(im); 
figure, imshow(im) 

請注意,您仍然需要閾值適用於從圖像中選取相關點,然後轉換座標系並重新排列點以便作爲連接集合正確顯示。您可能還需要修改初始圖像文件的分辨率或應用圖像處理功能以獲得平滑的曲線。

+0

謝謝你的偉大想法。可能我會從第一個選項開始,即從圖像中獲取數據。你能否給我建議一個好的教程或腳本來從圖像中獲取座標? – bordart