Распределение памяти для больших растровых изображений в blob детектировании, C # .Net - PullRequest
0 голосов
/ 30 марта 2011

У меня есть растровые изображения, такие как высота и ширина 14000x18000 (~ 30 МБ). Я пытаюсь обработать их с помощью различных библиотек обработки изображений (OpenCV (используя оболочку OpenCvSharp), Aforge.NET ..), чтобы выполнить обнаружение BLOB-объектов. Однако маркировка растрового изображения вызывает проблемы с выделением памяти. Библиотека пытается отобразить помеченное изображение на 32-битное изображение.

Есть ли способ выполнить операцию маркировки с меньшим объемом памяти? (Обрезка изображения не является решением)

Например, маркировка растрового изображения на 8-битном изображении вместо 32?

Ответы [ 2 ]

1 голос
/ 30 марта 2011

В случае, если нет ответа на 8-битную вещь ... и даже если есть ...

В целях скорости и памяти, я бы настоятельно рекомендовал изменить размер изображения (некадрирование).Используйте высококачественную интерполяцию, например , в этом примере , только изменение размера до 50%, а не миниатюра (7,5 МБ памяти).

Вы не упомянули, что не хотите делатьэто, и я предполагаю, что вы, вероятно, не хотите пробовать это, думая, что библиотека будет лучше обнаруживать капли при полном разрешении.Перед тем, как отмахнуться от идеи, вам необходимо протестировать ее с использованием части образца изображения с полным разрешением, размер которой будет обрабатываться библиотекой, по сравнению с тем же подразделом на 50%.

Если вы на самом деле не сделали этого, вы не можете знать.Вы также можете определить максимальный объем памяти, который может использовать изображение, вычислить коэффициент изменения размера для целевого значения (уменьшите его в целях безопасности - вы узнаете об этом, когда в тесте произойдет взрыв).Если вас волнует, где находится материал в исходном изображении, увеличьте масштаб до коэффициента.

0 голосов
/ 31 марта 2011

Это может не решить вашу конкретную проблему (или может быть), но вы рассматривали возможность разбиения / сегментирования кадра в матрицу 2x2 (или 3x3) и пытались работать с каждой из них в отдельности. Затем, основываясь на том, где вы найдете капли в 4 (или 9) кадрах, сопоставьте и объедините смежные капли, чтобы создать один блоб. Конечно, это объединение больших двоичных объектов должно быть вашей собственной логикой.

PS> По общему признанию, отрабатывая очень поверхностные знания Aforge. Нет практического опыта, что так никогда.

...