Nano Hash - криптовалюты, майнинг, программирование

Xcode, iOS — распознавание линий/форм изображения

Я хочу идентифицировать квадраты/прямоугольники внутри моего UIImageView (или UIImage).

Я посмотрел на "Очень простое распознавание изображений на iOS", но это не совсем что я ищу.

На данный момент у меня есть UIImageView, которому время от времени дают UIImage.

Большинство UIImagees имеют черные квадраты/прямоугольники, подобные этому: img. Но углы могут (или не могут) иметь закругленные края.

Как определить размер первого черного квадрата/прямоугольника? Конечным результатом будет изменение размера моего UIImageView, чтобы первый черный квадрат в UIImage заполнил экран. Вот так: img с iPhone


  • Можете ли вы просто уточнить класс изображений, которые вы будете использовать на практике? Будете ли вы буквально всегда использовать черные контурные блоки со всем остальным белым или это будут, скажем, блоки с произвольным содержимым, окруженным черной рамкой на белом, или еще что-то? 13.09.2012
  • под квадратом ты имеешь в виду прямоугольник? просьба уточнить... 13.09.2012
  • сделать просмотрщик комиксов? вам, вероятно, придется распознавать образы, но это не должно быть слишком плохо, если вы просто ищете такие разделительные линии. 13.09.2012
  • Квадрат может иметь закругленные края и быть заполненным цветами. Размер квадрата/прямоугольника также может варьироваться. 14.09.2012
  • @AleksanderAzizi - В этом случае вам, вероятно, следует обновить вопрос, добавив несколько примеров изображений, иллюстрирующих различные случаи. Мой ответ не будет работать для изображений с рамкой, у которых есть цвет и другие функции внутри полей, но я исходил из того, что вы хотите обнаруживать формы так же, как то, что у вас было в вашем вопросе. Закругленные углы также будут представлять проблему, но в зависимости от радиуса угла вы можете сначала уменьшить изображение и выполнить обнаружение углов на меньшем изображении, где радиус был эффективно удален. 16.09.2012

Ответы:


1

Если ваши изображения всегда будут четкими черными квадратами в горизонтальном ряду, вы можете использовать обнаружение углов для идентификации прямоугольников, а затем выбрать четыре крайних левых угла. У меня есть три варианта детекторов углов в моем фреймворке GPUImage с открытым исходным кодом, основанном на Harris, Noble и Shi. - Методы обнаружения углов Томаси.

Запуск GPUImageHarrisCornerDetectionFilter против ваших блоков с порогом 0,4 и чувствительностью 4,0 дает следующий результат:

Результаты обнаружения углов Harris

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

Пример запуска такого обнаружения функций можно найти в примере FilterShowcase или FeatureExtractionTest в моей структуре. Я описываю процесс, с помощью которого я это делаю, в этот ответ в Signal Processing.

12.09.2012
  • Очень хорошее решение! +1 от меня. К сожалению, вопрос был изменен, чтобы также содержать закругленные углы... 16.09.2012
  • Спасибо за классный фреймворк! Однако я не могу заставить это работать. Я даже попробовал пример FeatureExtractionTest, и он не нашел никаких углов. Я разместил здесь свой вопрос (до того, как увидел это) stackoverflow.com/questions/18914461/ 20.09.2013

  • 2

    Кажется, самым простым решением было бы:

    1. суммировать все пиксели по вертикали до самой верхней строки (например, в таблице Excel)
    2. строки с наименьшим/самым большим значением - это ваша область "пробела"

    ширина может быть получена из (2).

    18.09.2012

    3

    Из того, что я понял по вашему вопросу, вам нужно реализовать алгоритм обнаружения краев Canny для обнаружения краев черных границ на вашем изображении.

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

    Используйте функцию ImageWrapper *Image::cannyEdgeExtract(float tlow, float thigh) из файла Image.m.

    17.09.2012
  • Хитрое обнаружение краев здесь вам не поможет, потому что вам все равно нужно определить ограничивающие рамки, которые определяют эти края. Кроме того, он подхватит два края: один для внешней стороны коробки, а другой для внутренней. Гребневый фильтр, вероятно, был бы более подходящим, но вам все равно нужно будет определить блоки из него. 18.09.2012
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..