Удалить разделенные объекты в изображении C#

Ваша помощь очень ценится. Я использую C# и EmguCV для обработки изображений

Я пробовал удаление шума, но ничего не происходит. Я также попробовал медианный фильтр изображения, и он работает только на первом изображении, но не работает на втором изображении. Это только делает второе изображение размытым, а объекты - более крупными и более квадратными.

Я хочу удалить явно отличающиеся объекты(зеленые) на моем изображении ниже, чтобы оно стало черным, потому что они явно разделены и не сгруппированы в отличие от второго изображения ниже.

Изображение 1:

Он сказал, что мне нужно 10 репутации, чтобы публиковать изображения, так что это изображение 1

Таким же образом, я хочу сделать это на моем изображении ниже, но удалить только те объекты - (черные), которые не сгруппированы /(сосредоточены?), Так что на изображении остаются объекты, которые сгруппированы / больше в масштабе?

Изображение 2:

Он сказал, что мне нужно 10 репутации, чтобы публиковать изображения, так что это изображение 2

Спасибо

2 ответа

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

  1. cvThreshold (с CV_THRESH_BINARY/CV_THRESH_BINARY_INV(выберите в соответствии с изображением) + CV_THRESH_OTSU) http://www.emgu.com/wiki/files/1.3.0.0/html/9624cb8e-921e-12a0-3c21-7821f0deb402.htm : h http://www.emgu.com/wiki/files/1.3.0.0/html/bc08707a-63f5-9c73-18f4-aeab7878d7a6.htm
  2. CvInvoke.FindContours (RetrType == Внешний,ChainApproxNone)
  3. Для каждого найденного в 2 контура рассчитайте CvInvoke.ContourArea
  4. Если область меньше, чем minArea, нарисуйте на исходном изображении (то, которое вы хотите отфильтровать) требуемое для них значение (я полагаю, 0) в исходном изображении, используя CvInvoke.DrawContours с текущим контуром и толщиной ==-1 для заполнить внутри контура.

Вы можете попробовать Gaussian Blur и затем применить Threshold к изображению.

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


Для вашего первого изображения:

CvInvoke.GaussianBlur(srcImg, destImg, new Size(0, 0), 5);//You may need to customize Size and Sigma depends on different input image.

Ты получишь:

введите описание изображения здесь

затем

CvInvoke.Threshold(srcImg, destImg, 10, 255, Emgu.CV.CvEnum.ThresholdType.Binary);

Ты получишь:

введите описание изображения здесь


Для вашего второго изображения:

CvInvoke.GaussianBlur(srcImg, destImg, new Size(0, 0), 5);//You may need to customize Size and Sigma depends on different input image.

Ты получишь:

введите описание изображения здесь

затем

CvInvoke.Threshold(srcImg, destImg, 240, 255, Emgu.CV.CvEnum.ThresholdType.Binary);

Ты получишь:

введите описание изображения здесь

Надеюсь, это поможет!

Другие вопросы по тегам