2012-02-20 54 views
2

我正在研究一個問題,該問題需要我計算兩個正方形的重疊區域。 這是一個程序的一部分,它將由幾個正方形檢測器單元/像素(陣列)組成的旋轉檢測器放置在由多個(較小)正方形像素組成的輸入圖上,並確定每個輸入像素髮出的光的百分比探測器像素。 我試過了一種幾何方法,但有很多可能的變化來解釋。確定檢測器系統中旋轉正方形的重疊

一個正方形可以相對於另一個正方形旋轉一個隨機角度,並且兩個正方形可以具有不同的尺寸。給出的參數是輸入映射上探測器像素的中心座標,探測器像素的大小(默認情況下輸入像素的大小等於1)和旋轉角度。

編輯:增加了一個草圖,以澄清

Sketch

那麼我現在要做的是計算它位於一個給定的探測器像素中的每一個輸入像素的一部分(黑方塊)(紅色正方形),其可以在0到1之間的任何地方。 然後,這可以與輸入像素的值相乘並且在所有輸入像素上求和以計算由檢測器像素收集的總光。

我嘗試使用的幾何方法是計算探測器像素邊緣的斜率,並使用與輸入像素邊緣的相交來計算總重疊。

回答

0

如果我正確理解你正在做什麼等於試圖在灰度位圖上查找重疊方塊?如果是這樣,你可以做角點檢測,並嘗試從檢測到的角落做出正方形,然後計算檢測到的正方形的重疊?這個opencv示例可能是一個很好的起點:https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/python/squares.py?rev=907

如果我誤解了這個問題(例如,我被旋轉角度困惑),提前道歉。

+0

不是真的。我已經添加了一個問題的草圖來闡明旋轉角度等。 – fungku 2012-02-20 17:02:11

0

下面是我將用來做到這一點的步驟。

  1. 確保您有兩個方塊角的座標。
  2. 平方
  3. 旋轉的兩個正方形的角以便平行在步驟拾取平方一個已側面與x軸和y軸
  4. 檢查是否cordinates其他的角正方形在第一個裏面。由於旋轉了,這與檢查x座標是否位於左側和右側之間以及y座標位於頂部和底部之間一樣簡單。

要旋轉點,你會使用一個函數是這樣的:

from math import sin, cos, radians 

def rotate_points(x, y, angle): 
    """Rotate a set of points `angle` degrees counterclockwise about 
    the origin. 
    """ 
    theta = radians(angle) 
    x_prime = x * cos(theta) - y * sin(theta) 
    y_prime = x * sin(theta) + y * cos(theta) 
    return x_prime, y_prime 
+0

這確實會檢查是否有可能重疊,但是我需要能夠計算總重疊。 – fungku 2012-02-20 17:00:33