2015-05-24 7 views
2

Привет, у меня есть изображение красного шара, и если я сделаю обнаружение края Canny, он найдет хороший край, но если я использую свое изображение чаши, он найдет много плохих краев. Я попытался использовать этот код для расчета оптимального порога, но id не помогает. Как я могу избавиться от линий на шаре и тени на балу?Canny edge detector в OpenCV

MatOfDouble mu = new MatOfDouble(); 
     MatOfDouble sigma = new MatOfDouble(); 
     Core.meanStdDev(imageInMat, mu, sigma); 
     Mat canny = new Mat(); 
     Imgproc.Canny(imageInMat, canny, mu.get(0,0)[0] - sigma.get(0,0)[0], mu.get(0,0)[0]+ sigma.get(0,0)[0]); 

Ball Bowl

+0

Градиент намного круче на чаше, особенно с зеркальными бликами. Вам нужно будет найти способ удалить или игнорировать зеркальные эффекты. – JDong

+0

Могу ли я использовать какой-либо другой детектор края? – Brunts

+0

Вы можете попробовать выполнить предварительную обработку ваших изображений. [Зеркальное отражение - это вещь] (http://rogerioferis.com/publications/FerisSIB04.pdf). Однако для этого требуется несколько фотографий с различным освещением. – JDong

ответ

0

вопрос является зеркальным отражением. Если у вас появилось больше изображений, с различными подсветками, вы можете попробовать применить Specular reflection reduction. В противном случае вам, вероятно, придется приспособить свой код к этой конкретной фотографии.

Я не специализируюсь на CG, но у вас есть другие идеи. Обратите внимание, что подсветка отличается от белого цвета, чем белый/серый фон. Вы можете использовать это в своих интересах и, возможно, применять некоторые фильтры или сглаживание. Кроме того, вы можете попробовать уменьшить шум на конечных краях, чтобы удалить небольшие края.

1

Ваши объекты имеют очень специфический цвет, поэтому использование цветовой информации может быть правильным способом в этом конкретном случае.

Преобразование изображение в цветовом пространстве HSV:

Hue канал:

enter image description here

Saturation канал:

enter image description here

Значение канала:

enter image description here

Обратите внимание, что в этом случае канал Hue не поможет, потому что тень и мяч выглядят одинаково. Тем не менее, мы можем использовать канал Saturation, чтобы найти Осторожные края:

оператор кэнни на канале Saturation:

enter image description here

Наконец, мы можем фильтровать полученные контуры, принимающие только один с самой большой площадью или область, превышающая определенный порог. Таким образом, мы просто получить мяч:

enter image description here

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

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

Смежные вопросы