Я использую EmguCV и C #. Я хочу удалить небольшие связанные объекты из моего изображения, используя ConnectedComponentsWithStats
У меня есть следующее двоичное изображение в качестве ввода
Я могу нарисовать прямоугольник для указанной области. Теперь я хочу удалить объекты из двоичного изображения
Вот мой код
Image<Gray, byte> imgry = image.Convert<Gray, byte>();
var mask = imgry.InRange(new Gray(50), new Gray(255));
var label = new Mat();
var stats = new Mat();
var centroids = new Mat();
int labels = CvInvoke.ConnectedComponentsWithStats(mask, label, stats,
centroids,
LineType.EightConnected,
DepthType.Cv32S);
var img = stats.ToImage<Gray, int>();
Image<Gray, byte> imgout1 = new Image<Gray, byte>(image.Width, image.Height);
for (var i = 1; i < labels; i++)
{
var area = img[i, (int)ConnectecComponentsTypes.Area].Intensity;
var width = img[i, (int)ConnectecComponentsTypes.Width].Intensity;
var height = img[i, (int)ConnectecComponentsTypes.Height].Intensity;
var top = img[i, (int)ConnectecComponentsTypes.Top].Intensity;
var left = img[i, (int)ConnectecComponentsTypes.Left].Intensity;
var roi = new Rectangle((int)left, (int)top, (int)width, (int)height);
if (area > 1000)
{
CvInvoke.Rectangle(imgout1, roi, new MCvScalar(255), 1);
}
}
Нарисованный прямоугольник для указанной области
Как удалить объекты указанного размера
Мое выходное изображение должно быть таким
Я добился одного способа с помощью контуров, он отлично работает для маленького изображения, когда у меня большое изображение 10240 * 10240 и более, количество частиц, которые мое приложение переходит в режим прерывания