В школе мы готовим художественные работы, которые мы отсканировали и хотим автоматически обрезать до нужного размера. Дети (попытка) рисовать внутри прямоугольника:
Я хочу определить границы внутреннего прямоугольника, поэтому я применил несколько фильтров в согласии.net:
var newImage = new Bitmap(@"C:\Temp\temp.jpg");
var g = Graphics.FromImage(newImage);
var pen = new Pen(Color.Purple, 10);
var grayScaleFilter = new Grayscale(1, 0, 0);
var image = grayScaleFilter.Apply(newImage);
image.Save(@"C:\temp\grey.jpg");
var skewChecker = new DocumentSkewChecker();
var angle = skewChecker.GetSkewAngle(image);
var rotationFilter = new RotateBilinear(-angle);
rotationFilter.FillColor = Color.White;
var rotatedImage = rotationFilter.Apply(image);
rotatedImage.Save(@"C:\Temp\rotated.jpg");
var thresholdFilter = new IterativeThreshold(10, 128);
thresholdFilter.ApplyInPlace(rotatedImage);
rotatedImage.Save(@"C:\temp\threshold.jpg");
var invertFilter = new Invert();
invertFilter.ApplyInPlace(rotatedImage);
rotatedImage.Save(@"C:\temp\inverted.jpg");
var bc = new BlobCounter
{
BackgroundThreshold = Color.Black,
FilterBlobs = true,
MinWidth = 1000,
MinHeight = 1000
};
bc.ProcessImage(rotatedImage);
foreach (var rect in bc.GetObjectsRectangles())
{
g.DrawRectangle(pen, rect);
}
newImage.Save(@"C:\Temp\test.jpg");
Это создает следующее перевернутое изображение, которое BlobCounter использует в качестве входных данных:
Но результат blobcounter не очень точен, фиолетовые линии показывают, что обнаружил BC.
Будет ли лучшая альтернатива BlobCounter
в согласии.net, или есть другая библиотека C #, лучше подходящая для такого компьютерного зрения?