public LargeDiamond(PixelBlock referentBlock, PixelBlock centerBlock, Image image) : base(referentBlock, centerBlock) { Blocks = new List <PixelBlock> { CenterBlock }; for (var i = -2; i < 3; i++) { for (var j = -2; j < 3; j++) { //Checks if distances is two and if block is inside search window. if (Math.Abs(i) + Math.Abs(j) != 2) { continue; } var point = new Point(CenterBlock.Position.X + i * MedicalDiamondSearchSettings.BlockSize, CenterBlock.Position.Y + j * MedicalDiamondSearchSettings.BlockSize); if (referentBlock.IsInSearchWindow(point, MedicalDiamondSearchSettings.SearchParameterP, MedicalDiamondSearchSettings.BlockSize, image.Width, image.Height)) { Blocks.Add(image.Blocks[point]); } } } }
/// <summary> /// Calculates vector between two blocks. /// </summary> /// <param name="block"></param> /// <returns></returns> public Vector GetVector(PixelBlock block) => new Vector(Position, block.Position);
/// <summary> /// Cots function for calculating mean squared error. /// </summary> /// <param name="block"></param> /// <returns></returns> public double BlockDistortion(PixelBlock block) => Pixels.Select((p, i) => new { p, i }).Sum(pi => { var diff = pi.p - block._pixels[pi.i]; return(diff * diff); }) / Pixels.Count;
public bool IsCenterBlock(PixelBlock block) => CenterBlock.Equals(block);
protected Diamond(PixelBlock referentBlock, PixelBlock centerBlock) { ReferentBlock = referentBlock; CenterBlock = centerBlock; }