Выбор точек на частях изображения по весу цвета - PullRequest
1 голос
/ 19 ноября 2010

Необходимо выбрать определенное количество точек на изображении (фактически на части этого изображения). Более темные части изображения более важны.

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

Может быть, после выбора точки вес должен быть уменьшен динамически? Не пробовал.

Я заметил, что исходное изображение имеет слишком много разных цветов, поэтому я хотел сгладить его, чтобы обрезать похожие цвета. Однако преобразования в оттенки серого было недостаточно.
Я использовал функции Emgu CV (обертка OpenCV) для преобразования в двоичную форму изображения. Чем я пытался рассчитать водораздел, но вычисленные площади не так легко отделить. Вообще, водораздел - довольно «неинтуитивный» подход для обнаружения темных мест.

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

Алгоритм не должен быть точным. Это может дать разные результаты в следующих итерациях. Количество очков не будет очень большим от 10 до 150-200.

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

Чтобы увидеть, что я имею в виду, см. Рисунок ниже. Содержит выбранные точки (кол-во ~ 20). В основном темные части выбраны. Точки не должны появляться в тех же местах после следующей итерации. Но я хочу выбрать точки в более светлых регионах, когда их будет больше.

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

Picture after points selection

1 Ответ

0 голосов
/ 22 ноября 2010

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

Простой подход - перебирать каждый пиксель. Сохраните значение текущего пикселя в переменной 's', затем:

if(s < 64) // Darker
    if(rand() % 5 == 1)
        // Add to list
else      // White
    if(rand() % 25 == 1)
        // Add to list
...