No description or website provided.
Java Shell
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
gradle/wrapper
nbproject
src/org/interactiverobotics/image
.gitattributes
.gitignore
2014-08-10-AsynchronousImageProcessor.png
2014-08-10-Grayscale.png
AsynchronousImageProcessor.uxf
COPYING
Export.sh
README.md
build.gradle
build.xml
gradlew
gradlew.bat

README.md

Image

Проект Image содержит простую для понимания реализацию распространенных алгоритмов обработки изображений. В проекте есть оптимизированная реализация некоторых алгоритмов с использованием библиотеки AWT. Также проект содержит классы для работы с цветовыми пространствами RGB и LAB, вспомогательные классы для чтения, записи и асинхронной обработки изображений.

Загрузка

Скачать актуальную версию можно по следующей ссылке:

Download

Описание

Пакет org.interactiverobotics.image.processing.experimental содержит простую реализацию следующих алгоритмов:

  • Blend (смешивание изображений: поддерживается множество режимов)
  • CLAHE (контрастно-ограниченное адаптивное выравнивание гистограммы)
  • CannyEdgeDetector (выделение границ по алгориму Кэнни)
  • ColorNormalization (нормализация цвета)
  • ColorSegmentation (сегментация изображения по цвету)
  • ColorSegmentationEx (сегментация изображения по множеству цветов)
  • ColorSegmentationCbCr (cегментация изображения по цвету в модели YCbCr)
  • Crup (кадрирование)
  • DistanceMap (разность изображений)
  • DoG (разница Гауссиан)
  • DynamicRangeCompression (компрессия динамического диапазона)
  • Format (форматирование: кадрирование и сдвиг)
  • GaussianBlur (размытие Гаусса)
  • Grayscale (преобразование в градации серого)
  • HistogramNormalization (нормализация гистограммы)
  • ImagePyramid (построение пирамиды изображений)
  • LocalContrastEnhancement (локальное увеличение контраста)
  • OtsuThreshold (бинаризация изображений по методу Оцу)
  • Resize (изменение размера)
  • Shift (сдвиг изображения)
  • SkinColorSegmentation (сегментация изображения по соответствию цвету кожи)
  • SmartBlur (умное, локальное размытие)
  • SobelEdgeDetector (выделение границ оператором Sobel)

Пакет org.interactiverobotics.image.processing содержит оптимизированную реализацию следующих алгоритмов:

  • Blend (смешивание изображений: поддерживается множество режимов)
  • Crup (кадрирование)
  • DynamicRangeCompression (компрессия динамического диапазона)
  • GaussianBlur (размытие Гаусса)
  • Grayscale (преобразование в градации серого)
  • Resize (изменение размера)
  • Shift (сдвиг изображения)
  • SkinColorSegmentation (сегментация изображения по соответствию цвету кожи)

Пример:

BufferedImage image = ImageHelper.loadImage("Lena.jpg");
Grayscale grayscale = new Grayscale(image);
grayscale.process();
ImageHelper.saveImage(grayscale.getProcessedImage());

Исходное изображение и результат (совмещены по горизонтали):

Grayscale

Реализовать алгоритм обработки изображений тоже просто. Например, так можно поменять местами каналы (RGB):

public class Mixer extends AbstractImageProcessor implements ImageProcessor {

    @Override
    public void process() {

        // Создаем обработанное изображение

        processedImage = ImageHelper.
            createGrayscaleImage(sourceImage.getWidth(), sourceImage.getHeight());

        // Преобразуем

        for (int y = 0; y < sourceImage.getHeight(); y ++) {

            for (int x = 0; x < sourceImage.getWidth(); x ++) {

                RGB a = RGB.get(sourceImage, x, y);

                RGB t = new RGB(a.B, a.G, a.R);

                t.set(processedImage, x, y);
            }
        }
    }

}

Асинхронный обработчик изображений предназначен для обработки кадров видео. Поскольку обработка, особенно если это техническое зрение, может длиться дольше чем интервал времени между кадрами, она выполняется в отдельном потоке. Клиент передает асинхронному обработчику исходное изображение (метод setSourceImage()), выполняет обработку (метод process()) (на самом деле он не выполняет обработку, а только смешивает исходное и временное изображения) и получает обработанное изображение (метод getProcessedImage()). По завершении обработки исходного изображения результат сохраняется во временное изображение (это происходит в отдельном потоке).

AsynchronousImageProcessor

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

Авторские права

Copyright (C) 2012-2016 Pavel Prokhorov (pavelvpster@gmail.com)

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Это свободная программа: вы можете перераспространять ее и/или изменять ее на условиях Стандартной общественной лицензии GNU в том виде, в каком она была опубликована Фондом свободного программного обеспечения; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.

Эта программа распространяется в надежде, что она будет полезной, но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Стандартной общественной лицензии GNU.

Вы должны были получить копию Стандартной общественной лицензии GNU вместе с этой программой. Если это не так, см. http://www.gnu.org/licenses/.