2014-06-11 104 views
-2

我是openCV和圖像處理的基本選手。現在使用openCV像鏈接文件一樣計算白色像素區域的中心點座標。但是,我很難找到這個白色圓圈的確切中心。我認爲在找到中心點之前,有一些步驟可以提高它的中心座標的準確性。你會與我分享你的想法或任何提示嗎?感謝,並有一個愉快的一天計算圓的中心座標

圖像路徑:http://blog.naver.com/colorring/220027355998(修改路徑)

// -------------------------- -------------------------------------------------- -----------------------------------------------
// @@@源代碼
// ---------------------------------------- -------------------------------------------------- ---------------------------------

IplImage * cimgGray = cvCreateImage(cvSize(m_OneimageXresolution,m_OneimageYresolution), IPL_DEPTH_8U,1);

cvCvtColor(m_Leftimg,cimgGray,CV_RGB2GRAY);

cvEqualizeHist(cimgGray,cimgGray); cvShowImage(「cvEqualizeHist」,cimgGray);

double threshold1 = cvThreshold(cimgGray,pImgOutput,150,255,CV_THRESH_BINARY); cvShowImage(「cvThreshold」,pImgOutput);

// -------------------------------------------- -------------------------------------------------- ------------------------------

+0

我們沒有對圖像的訪問權限。請將其上傳到其他地方。 –

+1

查看opencv支持的時刻計算結果 –

+1

您還沒有寫過如何嘗試找到該座標中心。你爲此編寫了自己的函數還是從OpenCV嘗試了一個函數?如果是後者,那麼你使用了哪個函數?如果你寫了你自己的函數,你使用了哪種數學方法? – KjMag

回答

0

有多種方法可以解決這個問題。如果您分享了有關問題域的更多詳細信息,這將有所幫助。

解決此問題的一種簡單方法是對二值化版本的(已經幾乎是二進制的)圖像運行「距離轉換」,然後搜索最大像素值。

僅供參考:我必須在鏈接末尾刪除?type = w3以查看圖像。

+0

感謝您的信息DrPepperJo。我會盡力去做。 – MichaelH

1

要在圖像中找到高精度的圓或橢圓的中心,應該使用圓的邊緣的所有像素。一個很好的辦法做到這一點是通過「周操作」,它是這樣工作的:

  1. 創建圖像(Canny邊緣檢測效果很好)邊緣圖

  2. 對於每一行(和在邊緣映射中的像素點,掃描最亮的像素(具有最強邊緣響應的像素),您應該找到一個亮度峯值進入您的圓圈,一個亮度峯值離開(入口峯值,出口峯值) 要估計你的圓圈具有亞像素精度,在兩個「峯值」像素周圍的邊緣映射中對像素進行拋物線擬合,在下圖中,最高的紅點是最亮的邊緣像素,符合拋物線,使用微積分找到具有零斜率的x值 - 這會爲您提供當前像素行上的入口點和出口點的子像素位置。 Fitting a parabola to edge-map pixels to estimate the location with maximal response with sub-pixel accuracy

  3. 接下來,平均您的(子像素)進入和退出點;這將爲您提供一組描述穿過圓心的線條(如下圖所示,綠色像素爲邊緣,紅色爲中心交叉線上的點)。

Using edge pixels (green) to find lines passing through the center (red)

  • 你可以使用迴歸在這一點上找到最佳擬合線,用於在步驟3中描述的中線點。然而,使用RANSAC找到一個良好的共識線,那麼只有在最小均方擬閤中包括獲勝候選人的選民才能將您的準確度提高大約一個數量級(因爲掃過這個圓的掃描線有很多由於假設誤差的正態分佈,所以導致出現中點的異常點會「毒化」直高斯LMS擬合)。
  • 根據您的圓圈的大小和傳感器的質量等,您可能會獲得1/50至1/100像素的誤差。

    +0

    到。愛德華。非常有用的描述爲我的理解計算它的原則。非常感謝你^^ – MichaelH

    +0

    不客氣,祝你好運! –

    0

    現在我可以看到你的測試圖像,我建議第二種可能的方法 - 我的另一個答案假設一個圓圈由「黑色」或「白色」區域組成,邊界清晰,沒有真正的漸變。這意味着遠離白色/黑色邊界的像素不包含有關圓心的信息,但您的圖像並非如此。

    根據您想要如何精確定位圖像中心,您可能會考慮使用更多像素信息的方法,可能是擬合,比如說二次多項式(或樣條線,如果是拋物線是不是一個很好的模型)直接到你的強度地圖中的像素的行和列,並將曲線的最大值指向通過圓心(我的答案中的紅色像素)的線上。因爲每個拋物線/樣條線都是從很多點構建而成的,所以您應該獲得非常好的中心點(各個像素中的噪點將被其鄰居大部分取消)。

    所有這一切說,首先嚐試最簡單的方法,並看看準確性和穩定性是否足夠適合您的應用程序。