2016-10-06 3 views
1

Я работаю над проектом, где я хочу обнаружить поры в данном изображении кожи. Я пробовал различные методы (HoughCircles, BlobDetection и Contours) из OpenCv с использованием Java, однако я не могу продолжить.Анализ поры кожи с использованием обнаружения Blob в OpenCV

HoughCircles показывает мне все ложные круги, и то же самое касается контуров. В моем текущем коде используется метод обнаружения BLOB, который также не показывает, что требуется. Пример кода написано ниже:

public void detectBlob() { 

    Mat orig = Highgui.imread("skin_pore.jpg",Highgui.IMREAD_GRAYSCALE); 

    Mat MatOut= new Mat(); 

    FeatureDetector blobDetector; 

    blobDetector = FeatureDetector.create(FeatureDetector.SIFT); 

    MatOfKeyPoint keypoints1 = new MatOfKeyPoint(); 

    blobDetector.detect(orig,keypoints1); 

    org.opencv.core.Scalar cores = new org.opencv.core.Scalar(0,0,255); 

    org.opencv.features2d.Features2d.drawKeypoints(orig,keypoints1,MatOut,cores,2); 

    Highgui.imwrite("PhotoOut.jpg", MatOut); 
} 
    public static void main(String args[]) { 
     BlobDetection bd = new BlobDetection(); 
     bd.detectBlob(); 
    } 

Когда я попробовал один и тот же код, используя FeatureDetector.SIMPLEBLOB вместо FeatureDetector.SIFT он показывает почти 0 сгустки.

Образцы выходных и исходных изображений прилагаются для вышеуказанного кода. Источник изображения enter image description here

Вывод изображения с использованием SIFT enter image description here

есть ли другой алгоритм, который может помочь в достижении результата или что может быть приемлемым подходом для достижения этой цели?

ответ

1

Поскольку вы ничего не задавали в своем вопросе, я не дам вам ответа. Еще несколько общих советов.

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

Я настоятельно рекомендую вам получить книгу начинающих, прочитать ее и убедиться, что вы ее понимаете. Затем сделайте еще несколько исследований по алгоритмам, которые вы хотите использовать, прежде чем использовать их. Вы не можете взять какое-то произвольное изображение, передать его в какой-то алгоритм обнаружения случайных функций, который вы найдете в Интернете и ожидаете успеха.

Преобразование hough для cirles, например, полезно для поиска круглых контуров примерно известного радиуса. Если вы знаете, как это работает внутри, вы поймете, почему не рекомендуется использовать его на вашем изображении.

https://en.wikipedia.org/wiki/Circle_Hough_Transform

алгоритмы Blobdetection и контур на основе могут работать, но только после того, как много предварительной обработки. Ваше изображение не очень «сегментация дружественный»

https://en.wikipedia.org/wiki/Image_segmentation https://en.wikipedia.org/wiki/Blob_detection

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

https://en.wikipedia.org/wiki/Scale-invariant_feature_transform

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

Всегда начинайте с начала вашей цепочки обработки. Можете ли вы получить более качественные изображения? (Лучше означает более подходящее для того, что вы хотите обнаружить). Это похоже на 10% камеры и 90% освещения. Я не думаю, что обнаружение поры кожи - это классическая задача для дерьмовых снимков сотового телефона, так почему бы не приложить немного усилий к настройке изображений?

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

Изображение, оптимизированное для обнаружения, которое вам нужно сделать, является наружным. Это упростит обработку изображений.

Затем предварительная обработка: как вы можете преобразовать изображение, которое у вас есть во что-то, с чего вы можете легко извлечь функции?

И так далее ...

+0

Я знаю некоторые основы обработки изображений после проведения некоторых исследований. Тем не менее, да, я новичок в этом, и я должен показать базовую функциональность (как раз для обнаружения поры кожи) к концу этой недели. Поэтому из-за этого мне нужна помощь через этот канал. Мне нужно использовать камеру мобильного телефона, чтобы получить изображение и обработать его. Это изображение было просто использовано для целей тестирования. – edeesan

+0

Тот, кто требует, чтобы вы обнаружили поры кожи с изображения сотового телефона, понятия не имеет, что он делает или говорит, и имеет очень сомнительный характер. Я думаю, что правильный термин - это дыра. Большинство сотовых телефонов, если не все, не могут даже правильно решить поры кожи ... Но если вам нужно использовать мобильный телефон, ваша первая ошибка не использует изображение сотового телефона. Попробуйте сделать полезную картинку с телефоном в качестве первого шага! – Piglet

+0

Я уже говорил об этом, и теперь мы решили, что мы должны делать снимки с надлежащего устройства, которое использовалось ранее в лаборатории. Теперь у меня вопрос, когда у меня есть правильный образ, у меня все еще нет правильного решения для обнаружения поры. Вышеупомянутый алгоритм, как сказано, не делает этого, и у меня очень мало времени для проведения исследований. Если вы можете помочь мне найти логику, это будет большой помощью. – edeesan