for y in (if minY < 0 then 0 else minY) .. (if maxY >= h then h - 1 else maxY) do
for x in (if minX < 0 then 0 else minX) .. (if maxX >= w then w - 1 else maxX) do
let mutable area = 0
for y in (if minY < 0 then 0 else minY) .. (if maxY >= h then h - 1 else maxY) do
for x in (if minX < 0 then 0 else minX) .. (if maxX >= w then w - 1 else maxX) do
- let p = PointD(float32 x, float32 y)
+ let p = PointF(float32 x, float32 y)
if pixelOwnedByE p e (neighbors |> List.choose (fun (otherE, p1, p2) -> if otherE.Removed then None else Some (otherE :> Ellipse, Utils.lineFromTwoPoints p1 p2)))
then
area <- area + 1
if pixelOwnedByE p e (neighbors |> List.choose (fun (otherE, p1, p2) -> if otherE.Removed then None else Some (otherE :> Ellipse, Utils.lineFromTwoPoints p1 p2)))
let elements = new Matrix<byte>(maxY - minY + 1, maxX - minX + 1)
for y in minY .. maxY do
for x in minX .. maxX do
let mutable darkStainPixels = 0
let mutable nbElement = 0
let elements = new Matrix<byte>(maxY - minY + 1, maxX - minX + 1)
for y in minY .. maxY do
for x in minX .. maxX do
- let p = PointD(float32 x, float32 y)
+ let p = PointF(float32 x, float32 y)
if pixelOwnedByE p e (neighbors |> List.choose (fun (otherE, p1, p2) -> if otherE.Removed then None else Some (otherE :> Ellipse, Utils.lineFromTwoPoints p1 p2)))
then
elements.[y-minY, x-minX] <- 1uy
nbElement <- nbElement + 1
if pixelOwnedByE p e (neighbors |> List.choose (fun (otherE, p1, p2) -> if otherE.Removed then None else Some (otherE :> Ellipse, Utils.lineFromTwoPoints p1 p2)))
then
elements.[y-minY, x-minX] <- 1uy
nbElement <- nbElement + 1
- if infection.Data.[y, x, 0] > 0uy
+ let infected = infection.Data.[y, x, 0] > 0uy
+ let stain = parasites.stain.Data.[y, x, 0] > 0uy
+ let darkStain = parasites.darkStain.Data.[y, x, 0] > 0uy
+
+ if infected
then
infectedPixels.Add(Point(x, y))
then
infectedPixels.Add(Point(x, y))
- if parasites.stain.Data.[y, x, 0] > 0uy
+ if stain
then
then
- stainPixels <- stainPixels + 1
+ stainPixels.Add(Point(x, y))
- if parasites.darkStain.Data.[y, x, 0] > 0uy
+ if darkStain
then
darkStainPixels <- darkStainPixels + 1
then
darkStainPixels <- darkStainPixels + 1
+ let mutable stainArea = 0
+ if infectedPixels.Count > 0
+ then
+ for stainPixel in stainPixels do
+ if infectedPixels.Exists(fun p -> pown (p.X - stainPixel.X) 2 + pown (p.Y - stainPixel.Y) 2 <= perimeterParasiteSquared)
+ then
+ stainArea <- stainArea + 1
+
+
let cellClass =
let cellClass =
- if float darkStainPixels > config.Parameters.maxDarkStainRatio * (float nbElement) ||