2014-10-28 81 views
2

所以我得到了一些我想使用的jpg格式的橫截面圖片。爲了更好地理解我只是畫了一幅畫,希望象徵不夠好實拍照片會有點什麼樣子:從R的圖像中提取邊界線

enter image description here

在畫面的頂部材料A,底部材料B.

目標:我想獲得兩種材質之間邊界線的像素。

我至今方式:

  • 我已經知道如何閱讀與呼包EBImage
  • 我也知道圖片,這將導致與 每個像素的顏色值的矩陣。
  • 我認爲將jpeg轉換爲只有黑白色彩的二進制圖片會更好。
  • 我認爲填充下面的黑色部分(材料B)並減少噪音會很好,所以我可以使用列總和(總和爲1)來查找材料A與材料B相接觸的行號,這應該是我的搜索邊界線(右?)。

問題:

  • 我不覺得濾波器,智能填充黑色部分,在實際的圖片,將會有更多的噪音,這將進一步複雜的事情...
  • 我不知道,如果這一切都是甚至是必要的,並且有到達我找到的邊界線

非常感謝您爲每個提示提前的目標,更有效的方法!

回答

0

你的照片看起來像是它可能是support vector machine的候選人。 R有svm函數的幾個包,一個是e1071。

+0

我讀了維基百科條目,它的聲音非常好。 – Mmadsen 2014-10-28 21:59:03

+0

我只是試圖從二進制圖片的svm函數的包描述中運行未經編輯的代碼,看看會發生什麼: svm = svm(x,y = NULL,scale = TRUE,type = NULL,kernel =「radial 「,degree = 3,gamma = if(is.vector(x))1 else 1/ncol(x),coef0 = 0,cost = 1,nu = 0.5,class.weights = NULL,cachesize = 40,tolerance = 0.001,ε= 0.1,收縮= TRUE,交叉= 0,概率= FALSE,擬合= TRUE,子集,na.action = na.omit) 令人驚訝的作品,但它是一個「列表30」後的對象svm,因爲我想要一個是邊界線的矢量,這個列表是什麼? – Mmadsen 2014-10-28 22:05:34

+0

好的:我猜你會得到一些搜索到的像素矢量,然後你必須決定使用哪種方法來「連接點」吧?! – Mmadsen 2014-10-28 23:29:04

1

當沒有例子可以使用時,答案總是模糊不清。我通常會使用ImageJ來完成像這樣的任務,但EBImage具有我將使用的命令。

從EBImage我會做二進制,然後侵蝕,擴大,並填補(fillHull)。

+0

我還沒有數據,所以對我來說也很模糊。我只是在做一些準備工作。我嘗試過: kern = makeBrush(10,shape ='diamond') x = erode(x,kern) x = dilate(x,kern) display(x)它已經給了我一個非常好的輸出自畫的圖片。我還沒有使用fillHull。 (z)給了我我想要的東西。希望這一切能像我預料的那樣按照真實的數據運作。非常感謝您的幫助,我將嘗試@Greg Snow的svm方法,看看它會如何運作:) – Mmadsen 2014-10-28 22:59:47

+0

對於「320」,我的意思是ncol(x)當然! =) – Mmadsen 2014-10-28 23:07:33