GithubHelp home page GithubHelp logo

diamond-needle-quality's People

Contributors

aaivanchenko avatar redb0 avatar rondi201 avatar

Stargazers

 avatar

Watchers

 avatar

diamond-needle-quality's Issues

Выбор наилучшего алгоритма выделения границ

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

Детекция границ через классические алгоритмы

Детекция границ с использованием "классических" алгоритмов

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

Подробнее см. в вики: Выделение границ

Предлагается проверить качество выделения границ на имеющихся изображениях. Нужно проверить как будут работать такие алгоритмы в случаях когда на фоне имеются другие объекты или изображение будет темным.

Предлагается следующая принципиальная схема:

  • выделение границ иглы
  • построение линий граней
  • определение нижней точки кончика иглы
  • определение точки пересечения линий граней
  • вычисление расстояния между двумя точками

Для объективной оценки и выбора метода фильтрации предлагается протестировать следующие методы:

  • Кэнни;
  • Робертса;
  • Превитта;
  • Собеля;
  • можно и другие выбрать.

Пример применения последних трех методов: Алгоритмы выделения контуров изображений

В качестве инструмента можно использовать OpenCV.

Полезные материалы

[Классические алгоритмы] Метод Робертса

Детекция границ с использованием "классических" алгоритмов. Фильтр Кэнни

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

Подробнее см. в вики: Выделение границ

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

  • кончик иглы четко различим;
  • на фоне имеются другие объекты;
  • темное изображение.

В рамках этого issue предлагается реализовать скрипт с методом Робертса на основе библиотеки OpenCV для выделения границ.

Подробнее о методе Робертса см. на вики: Перекрёстный оператор Робертса

Полезные материалы

Работа с шумом на картинке

В рамках этого issue предлагается реализовать скрипт по удалению шумов с картинки, после работы алгоритма по выделению границ.

После работы данного скрипта в идеале должно остаться только границы алмазной иглы.

Реализовать несколько вариантов фильтрации, выбрать лучший.

Найти данные варианты.

Сохранить отфильтрованные изображения границ иглы для всех тестовых изображений.

Собрать данные

  • Найти 5-10 фотографий заточенной иглы; +
  • Найти 5-10 фотографий затупленной иглы; +
  • Перевести картинки в белый фон, сохранить в отделью папку;

Модуль получения контура иглы

Модуль получения контура иглы

Используя результаты проведенных исследований "классических" алгоритмов компьютерного зрения (#7, #8, #9, #10 и #14), реализовать модуль contour.py для получения контура иглы.

Требования к реализации

Модуль должен содержать все необходимые функции для определения контура иглы на изображении:

  • функция поиска контура, она должна возвращать массив точек контура;
  • вспомогательные функции обработки контуров, например, фильтрация контуров и др.

Все функции, а также сам модуль нужно снабдить документацией и аннотацией типов.

[Классические алгоритмы] Метод Превитта

Детекция границ с использованием "классических" алгоритмов. Метод Превитта

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

Подробнее см. в вики: Выделение границ

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

  • кончик иглы четко различим;
  • на фоне имеются другие объекты;
  • темное изображение.

В рамках этого issue предлагается реализовать скрипт с методом Превитта на основе библиотеки OpenCV для выделения границ.

Подробнее о методе Робертса см. на вики: Оператор Прюитт

Полезные материалы

CONTRIBUTING.md

Написать рекомендации для участника репозитория

В рекомендациях для участников (CONTRIBUTING.md) описываются правила по которым ведется разработка и которых нужно придерживаться при внесении своего вклада.

Например, рекомендации могут содержать:

  • Основные требования:
    • Требования к оформлению кода (стандарт кодирования и правила проверки, например, с помощью линтера)
    • Требования к документированию (стиль строк документации, аннотация типов, доктесты)
    • Требования к тестированию (уровень покрытия тестами, используемый фреймворк для тестирования)
    • Правила оформления сообщений коммитов
    • И другое.
  • Правила по внесению вклада:
    • Сообщения об ошибке
    • Добавление новой функциональности
    • И другое

Полезные материалы

Примеры

Работа с изображением

Работа с изображением

В рамках данного issue предпологается поработать с исходным изображением, а именно поэксперементировать:

  • с повышением четкости изображения;
  • с фильтрами для размытия изображения;

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

  • Нужно проверить как будет работать алгоритм, на всех измененных изображениях.
  • Отдельную проверку сделать над изображениями с явно выделенными границами и с плохо выраженными границами.
  • Сравнить полученные результаты.
  • Сделать выводы, по полученным результатам

В рамках этого issue предлагается реализовать скрипт с обработкой изображения на основе библиотеки OpenCV.

Полезные материалы

Модуль для обработки изображений

Модуль для обработки изображений

Используя результаты проведенных исследований по обработки изображения в "классических" алгоритмов компьютерного зрения (#7, #8, #9, #10 и #14), а так же результатов работы с различными размытостями изображения (#25) реализовать модуль imageproc.py для обработки изображения.

Требования к реализации

Модуль должен содержать все функции, которые были исследованы для обработки изображений:

  • функции преобразования границ серого;
  • функции четкости;
  • функции размытости;
  • и др. функции, которые предпологают работу с изображением

Все функции, а также сам модуль нужно снабдить документацией и аннотацией типов.

Перенос границ в таблицу DataFrame

В рамках этого issue предлагается реализовать скрипт по переводу изображения с выделенными границами, алмазной иглы после работы алгоритма, в объект таблицы DataFrame, где X - координата точки границы по оси абсцисс, а Y - координаты точки границы по оси ординат.

Отрисовать полученные точки на плоскости.

Сохранить полученные таблицы для всех тестовых картинок отдельно.

Модуль для определения типа иглы и величину угла

Модуль для определения типа иглы и величину угла

Используя результаты проведенных исследований по определению тупой или острой иглы (#17) , а так же по результатам определения велечины угла. Реализовать модуль название_модуля.py для определения типа иглы (острая тупая), а так же определение величины угла.

Требования к реализации

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

  • функции построения линий регрессии;
  • функции определения типа иглы;
  • функции определения величины угла;
  • и др. функции, которые предпологают работу с определением типа иглы и величиной угла

Все функции, а также сам модуль нужно снабдить документацией и аннотацией типов.

Метод повышения качества выделения границ изображений с использованием алгоритма PSO

Метод повышения качества выделения границ изображений с использованием алгоритма PSO

Предлагается реализовать детекцию границ алмазной иглы с помощью метода, который представлен в источнике.

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

  • кончик иглы четко различим;
  • границы плохо выражены;
  • изображение после обработки различными способами.

В рамках данного issue предлагается реализовать скрипт с методом повышения качества выделения границ изображений с использованием алгоритма PSO

Полезные источники

Добавление requirements.txt

Создать файл requirements.txt, в котором будут прописаны используемые в проекте библиотеки.

Создать файл можно автоматически следующим образом:
pip list --format=freeze > requirements.txt

Автопроверка кода

Автопроверка кода на GitHab.

В данном issue планируется настроить автопроверку кода при помощи pylint и flake8

Реализация главного окна

Реализация главного окна

В рамках данного issue необходимо сделать реализацию главного окна приложением с использованием PyQt дизайнера или чистого PyQt.

Реализация окна должна в себя включать:

  • загрузка изображения
  • обработка изображения (построение линий и вывод результата)
  • отмена результата (очистить картинку от наложенных линий)
  • меню приложения
  • инструмент рисования линий вручную
  • инструмент редактирования (перетаскивания) линий

Дополнительно к выше перечисленному предлагается реализовать следующее:

  • Возможность сохранять предыдущие картинки с результатами (можно sqlite или др.)
  • Функционал выбора предыдущих "проектов" и возможность работы с ними снова
  • Возможность удалять старые "проекты"

Создание репозитория

  • Создать репозиторий, соблюдая следующую структуру:
    - models – здесь хранятся обученные модели;
    - data – здесь хранятся данные;
    - notebooks – здесь хранятся тетрадки jupyter;
    - src – здесь хранится исходный код.
  • Создать .gitignore:
  • changelog
  • LICENSE
  • Оформить задачи, в виде issues с назначенным исполнителя и весом.

Макет приложения

Макет приложения

В рамках данного issue препологается придумать (разработать) макет приложения.

На мекете должны быть отображены обязательно:

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

README

Написать README

Написать README для проекта, описывающий его особенности, варианты использования, участия и др.

Вариант содержания

  • Название проекта
    Сразу после названия можно указать разные значки или плашки. Например, как разместить значок лицензии можно посмотреть по ссылке: https://gist.github.com/lukas-h/2a5d00690736b4c3a7ba. Аналогичные значки можно использовать для тестов, сборок, линтеров и прочего.
  • Описание (Description)
    В этом разделе нужно описать цель проекта и его основную функциональность. Дополнительным плюсом будет наличие изображений, наглядно показывающих работу приложения
  • Зависимости (Dependencies)
    Здесь нужно перечислить все сторонние библиотеки и порядок их установки. Желательно указывать все зависимости в файле requirements.txt для удобной установки. Также можно использовать poetry для управления зависимостями. Хорошей практикой будет разделить dev зависимости от prod зависимостей. При использовании обычного pip dev зависимости можно вынести в отдельный файл, например, dev_requirements.txt.
  • Установка (Installation)
    Этот раздел должен содержать инструкции, которые необходимо выполнить для развертывания данного приложения.
  • Использование (Usage)
    Приведите здесь краткое описание основный функций проекта. Желательно снабдить описание иллюстрациями.
  • Тестирование (Testing)
    Опишите порядок запуска тестов для проверки вашего приложения.
  • Настройка окружения (Development setup)
    Здесь можно описать необходимые шаги для начала разработки данного проекта.
  • Поддержка (Contributing)
    Здесь нужно кратко описать порядок внесения вклада в проект. Также можно сослаться на файл CONTRIBUTING.md.
  • Лицензия (License)
    Упомяните наименование лицензии, которая используется в проекте.

Опциональные разделы:

  • Релизы (Release History)
  • TODO

Примеры

Нахождение уравнений границ

В рамках этого issue предлагается реализовать скрипт, находящий линейные уравнения, которые описывают найденные границы алмазной иглы.
При помощи двух линейных регрессий описать боковые грани иглы.
Найти точку минимума и при помощи неё найти третью линию, которая описывает нижнюю границу иглы.
Построенные линии изобразить на рисунке с выделенными границами, а так же на исходном рисунке.

Руководство пользователя

Создать html файл с руководством пользователя. В данном руководстве должны быть отображены следующие аспекты:

  • Как пользоваться программой (руководство пользователя):
    Как пользоваться программой, какие возможности предоставляет программа.

  • Страничка о программе. (О программе):
    В данной части должны быть отображены пуннты связанные в общем о программе.
    Можно ответить на некоторые вопросы: Что делает программа? Какие особенности?
    Также в данной части можно отметить благодарности и отдельную часть для программистов

Поворот изображения на 90 градусов

Поворот изображения

Изначальное изображение может быть повернуто по произвольным образом. В связи с этим требуется функционал поворота изображения после его загрузки в программу.

Требования к реализации

В программу требуется добавить две кнопки для поворота изображения на 90 градусов по часовой и против часовой стрелки. Кнопки должны иметь соответствующие иконки.

Сборка проекта

В данном issue необходимо собрать весь проект в файл .exe.

Можно использовать следующее:

  1. pyinstaller
  2. cx_Freeze.

Первый вероятнее всего использовать проще так как:

  • Для сборки необходимо написать файл генерации (довольно простой). Данный файл можно сгенерировать и изменить при необходимости.

Дополнение ко всему необходимо сделать следующее:

  • Написать .bat (батник), для сборки проекта. Батник должен в себя включать также:
    • Составление название для сборки, для понимания какая версия (?)
    • Так же отправлять сборку сразу в архив название_версия_дата (можно опустить название)

[идея] Автоматический поворот изображения

Автоматический поворот изображения

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

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

  • вычислить ось симметрии через корреляцию исходного изображения и его отражения
  • вычислить ось симметрии простым сравнением

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

Другой подход заключается в использовании контура самой иглы, полученной с помощью OpenCV. Можно повернуть сам контур или линии регрессии для граней так, чтобы он стал симметричным относительно центральной вертикальной оси изображения. На основе этого угла поворота повернуть изображение.

Соответствующий вопрос на stackoverflow:

https://stackoverflow.com/questions/7414057/algorithm-to-calculate-symmetry-of-points

Модуль генерации отчётов о качестве иглы на изображении

Создать модуль на языке python для генерации отчётов о качестве иглы на изображении.

Созданный модуль должен содержать функции, которые позволяют сделать следующее:

  1. Сохранять изображение иглы с выделенными границами на компьютер пользователя. Функция должна принимать изображение в формате QImage (или в виде np.ndarray, но это менее желательный вариант) и сохранять его по выбранному пользователем пути. Для выбора и сохранения можно использовать QFileDialog.
  2. Сохранять отчёт в формате PDF, содержащий в себе:
  • время создания отчёта;
  • изображения иглы с выделенными границами;
  • информацию об угле заточки иглы;
  • вердикт о тупости иглы.
    Функция должна принимать изображение в формате QImage (или в виде np.ndarray, но это менее желательный вариант), угол заточки иглы (float) и вердикт о тупости иглы (boolean) и сохранять его по выбранному пользователем пути. Для выбора и сохранения можно использовать QFileDialog.

[Классические алгоритмы] Фильтр Кэнни

Детекция границ с использованием "классических" алгоритмов. Фильтр Кэнни

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

Подробнее см. в вики: Выделение границ

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

  • кончик иглы четко различим;
  • на фоне имеются другие объекты;
  • темное изображение.

В рамках этого issue предлагается реализовать скрипт с фильтром Кэнни на основе библиотеки OpenCV для выделения границ.

Полезные материалы

[Классические алгоритмы] Метод Собеля

Детекция границ с использованием "классических" алгоритмов. Метод Собеля

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

Подробнее см. в вики: Выделение границ

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

  • кончик иглы четко различим;
  • на фоне имеются другие объекты;
  • темное изображение.

В рамках этого issue предлагается реализовать скрипт с методом Собеля на основе библиотеки OpenCV для выделения границ.

Подробнее о методе Робертса см. на вики: Оператор Собеля

Полезные материалы

Дополнить Readme файл

Необходимо дополнить Readme файл, добавив в него проделанную на текущий момент работу.

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.