Задать вопрос
Ответы пользователя по тегу Обработка изображений
  • Как определить качество изображения?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Что, если пройтись матричным фильтром, размерностью 3x3, 5x5, 7x7 и т.д.
    В ответе он выдаёт среднее цветовое расстояние между центральным пикселем и соседними.
    Прямо в цикле суммируешь эти величины. В конце делишь на площадь в пикселях. И получаешь среднюю изменчивость картинки на пиксель.
    Провести несколько экспериментов, найти пороговое значение на свой вкус. Оценить изменение значений в зависимости от размера фильтра, размера изображения, вида изображения (цветное, серое).
    И выдать суждение: до сюда - нормальное изображение, а отсюда - размытое. Между значениями - неопределённость.
    Может и получиться!
    Цветовая дистанция - это тоже проблема, как его посчитать.
    Последнее время использую простую эмпирическая функция расчёта разницы между двумя цветами в Java:
    public static final double SQRT_3 = Math.sqrt( 3.0d );
    
    	/**
    	 * Calculates distance in RGB color space with Euklidian distance between each component
    	 *
    	 * @param c1 {@link Color} one
    	 * @param c2 {@link Color} two
    	 * @return double result of comparison. Max possible distance is 255.0. Minimum 0.0
    	 */
    	public static double colorDistance( Color c1, Color c2 )
    	{
    		double rDist = c1.getRed() - c2.getRed();
    		double gDist = c1.getGreen() - c2.getGreen();
    		double bDist = c1.getBlue() - c2.getBlue();
    		double distance = Math.sqrt( rDist * rDist + gDist * gDist + bDist * bDist ) / SQRT_3;
    		return distance;
    	}//end color distance method

    Уже не помню, почему именно её, т.к раньше была другая, но изменил по каким-то теоретическим соображениям. Давно.
    Для моих задач работает сносно. Разница получается от 0 (одинаковые цвета) до 255 (между чёрным и белым).
    В Инете можно найти уйму других подходов.
    Ответ написан
    Комментировать
  • Как изменить размер изображения Java?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Похоже, что масштаб уменьшения Вы установили, но ни к какой картинке его не применили.
    Ответ написан
    Комментировать
  • Кто знает грамотную программу для трассировки изображений из растра в вектор?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    На С(++) если писать свою программу любой сложности, то однозначно библиотека potrace. Опен-соурсе к тому же.
    Ответ написан
    Комментировать
  • Как разделить содержимое монохромного изображения на отдельные файлы?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Берётся любой алгоритм заливки одноцветного растрового полигона любым цветом, начиная с любой его точки заданного цвета. Они были ещё под ДОС заготовлены в любом растровой библиотеке (в том-же Борланде).

    1. Ищется слева направо сверху вниз первая точка нужного цвета. Если не найдена - выход. Иначе на 2.
    2. Точка запоминается на будущее. Начиная от найденной точки, заливается полигон, включающий её каким-либо рабочим цветом (алгоритмом заливки).
    3. Определяются bounding box (экстенты) этого найденного полигона (top Y уже известен - как у первой точки) в растровой системе координат. Создаётся растр этого размера (или чуть расширенный для красивых границ). В него перегоняется найденный полигон.
    4. Сохраняется найденный полигон в файл.
    5. Из оригинального изображения устраняется найденный полигон. Скажем, методом той же заливки, но уже цветом отсутствия. Или вариацией операции XOR по цвету заливки.
    6. Начиная с запомненной точки, ищется следующая точка нужного цвета.
    7. Если найдена, на шаг 2.
    8. Если не найдена, выход.

    Не ясным пока остаётся поиск экстентов (Bounding box, BB). Самое простое - сканировать каждый раз весь исходный растр, что не комильфо. Или как-то модифицировать алгоритм заливки - с запоминанием экстентов. Что достаточно просто. И залил и экстенты получил за один раз.
    Ответ написан
    Комментировать