質問

統計プラットフォームとしてRの経験がありますが、画像ベースの数学には経験が浅いです。穴と不規則な曲線を備えた一連の写真(TIFF形式、PX/µmが知られています)があります。穴とその特定の穴の間の最短距離と最も近い曲線を測定したいと思います。写真の各穴についてこれをやりたいです。ホールも通常ではないので、プログラムに穴と曲線とは何かを伝える必要があるかもしれません(ImageJにはポイントとセグメント化された線関数があります)。

これを行う方法はありますか? rでどのパッケージを使用すればよいですか?この種のタスクには別のプログラムをお勧めしますか?

Example image

役に立ちましたか?

解決

編集: これを行うことは、Scleroパッケージを使用して可能になりました。現在、パッケージは利用できます github 手順については詳細に説明します チュートリアル. 。説明するために、私はチュートリアルの例を使用します。

library(devtools)
install_github("MikkoVihtakari/sclero", dependencies = TRUE)
library(sclero)
path <- file.path(system.file("extdata", package = "sclero"), "shellspots.zip")
dat <- read.ijdata(path, scale = 0.7812, unit = "um") 
shell <- convert.ijdata(dat)
aligned <- spot.dist(shell)
plot(aligned)

enter image description here

Scleroパッケージによって提供された機能を使用して、サンプルスポットサイズを追加することもできます。チュートリアルのセクション2.5を参照してください。

他のヒント

画像Jのために記述されたエッジ検出のためのツールがあり、最初に穴と線を見つけ、それらを明確にするのに役立ちます。あなたはそれを見つけます

http://imagejdocu.tudor.lu/doku.php?id=plugin:filter:edge_detection:start

トレッションとヒステリシスの設定で遊ぶことは、線と穴を見つけるために役立ちます。これがあなたの実際の写真を見ずに作業する可能性があるかどうかを判断することは困難ですが、私の同僚はFRAP画像でこのツールを使用して良い結果をもたらしました。これらの画像に基づいてFRAP分析で回復を計算できるImageJツールをプログラムしました。コードを見ると、自分のためにいくつかのアイデアを得るかもしれません(参照: http://imagejdocu.tudor.lu/doku.php?id=plugin:analysis:frap_normalization:start )

私があなたが画像で作業できることを知っている唯一の方法は、使用することです EBImage それは生体伝導体システムに含まれています。その包み Rimage 孤児であるため、もはや維持されません。

最短の距離を見つけるには、ラインと穴の座標を取得したら、ショットガンアプローチに移動できます。すべてのポイントとライン間の距離を計算してから最小限に抑えます。 Rのイラスト:

x <- -100:100
x2 <- seq(-70,-50,length.out=length(x)/4)

a.line <- list(x = x,
               y = 4*x + 5) 

a.hole <- list(
  x = c(x2,rev(x2)),
  y = c(200 + sqrt(100-(x2+60)^2),
        rev(200 - sqrt(100-(x2+60)^2)))
  )

plot(a.line,type='l')
lines(a.hole,col='red')

calc.distance <- function(line,hole){

  mline <- matrix(unlist(line),ncol=2)
  mhole <- matrix(unlist(hole),ncol=2)

  id1 <- rep(1:nrow(mline),nrow(mhole))
  id2 <- rep(1:nrow(mhole), each=nrow(mline))

  min(
    sqrt(
      (mline[id1,1]-mhole[id2,1])^2 + 
      (mline[id1,2]-mhole[id2,2])^2
    )
  )
}

それで :

> calc.distance(a.line,a.hole)
[1] 95.51649

これは、円と線から方程式を導出することで数学的に確認できます。これは、数千のラインと穴を記述する数百万ポイントがない場合、十分に速くなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top