• Медицинско изображение: Сегментирането на изображението се счита за най-съществения процес за медицинско изображение, тъй като извлича областта на интерес (ROI) чрез полуавтоматичен или автоматичен процес. Той разделя изображение на области въз основа на определено описание, като например сегментиране на телесни органи/тъкани в медицинските приложения за откриване на граници, откриване/сегментиране на тумори и масово откриване
  • Откриване на обекти: Откриването на обекти е друга интересна област в компютърното зрение, която ни помага да откриваме определен клас обекти в цифрови изображения и видео. Добре проучените области на откриване на обекти включват „разпознаване на лица“ и „разпознаване на пешеходци“.
  • Система за контрол на трафика: Контролът на трафика е наистина предизвикателна задача за правителството днес. С нарастващото търсене и темп на производство на превозни средства, плътността на превозните средства се увеличава с всеки изминал ден. Използвайки компютърно зрение, можем да правим много неща за автоматизация в тази област, като анализиране на трафика, нарушения на трафика, контролиране на трафика и други
  • Видеонаблюдение: Неговият наистина отнемащ време процес, наблюдението на всички камери на голям клъстер от система за наблюдение на сигурността. Видеонаблюдението с възможност за компютърно зрение ни помага да открием необичаен модел или дейности, записани в видеонаблюдение.

K-означава групиране

Клъстерирането на K-означава е метод, който групира точки от данни или вектори по отношение на най-близките средни точки. Това води до разделяне на точките от данни или вектори в клетки на Вороной. Когато прилагаме алгоритъм за клъстериране на k-средства към изображение, той приема всеки пиксел като векторна точка и изгражда k-клъстери от пиксели. Нека да преминем през алгоритъма на псевдокода.

  1. Изберете броя на клъстерите (K) и вземете пиксели
  2. Инициализирайте K-средства с произволни пиксели
  3. Повторете стъпки 4 и 5 до конвергенция или до края на фиксиран брой повторения
  4. за всеки пиксел Pi:
    1. Намерете най-близкия Centroid
    2 . Присвоете пикселите към този клъстер
  5. за всеки клъстер Ci
    1. центроид = средна стойност на всички точки, присвоени на този клъстер
  6. Край

Сега е време за игра!

На първо място, трябва да импортираме необходимите библиотеки за нашата задача за сегментиране на изображения. В нашата ситуация проблемът изисква много векторни изчисления. Структурите от данни на Python по подразбиране не са предназначени за високопроизводителни векторни изчисления. И така, ние използваме numpy (основната библиотека за научни изчисления в Python. Тя предоставя обект с многоизмерен масив с висока производителност и инструменти за работа с тези масиви). За чертане на изображение използваме matplotlib, той предоставя обектно-ориентиран API за вграждане на графики в нашия бележник. И най-важната библиотека в компютърното зрение cv2, библиотека, предназначена да решава проблеми с компютърното зрение. Моля, инсталирайте тези библиотеки, ако все още не са налични във вашата система.

Сега трябва да обработим предварително нашето изображение, за да гарантираме, че входният пиксел е съвместим с алгоритъма cv2.kmean. И така, преоформяме пикселите на изображението в 2D масив от RGB стойности и преобразуваме всяка цветова стойност в плаващи 32 формата.

Тук използваме вградена функция (kmeans), налична в cv2 за клъстериране на пиксели на нашето изображение. И така, можем да преминем през аргументите на cv2.kmean. Основно има 5 аргумента. Той връща 3 стойности обратно, което е компактност, етикети и центрове.

Параметри CV2.KMEANS

  • samples : Трябва да е от тип данни np.float32 и всяка функция трябва да бъде поставена в една колона.
  • nclusters(K) : Броят клъстери, необходими в края
  • критерии : Това са критериите за прекратяване на итерацията. Когато този критерий е изпълнен, итерацията на алгоритъма спира. Всъщност трябва да е кортеж от 3 параметъра. Те са ( type, max_iter, epsilon ):
    - тип критерии за прекратяване. Той има 3 флага, както е показано по-долу:
    ( 1. cv.TERM_CRITERIA_EPS — спира итерацията на алгоритъма, ако се достигне зададената точност, епсилон.
    2. cv.TERM_CRITERIA_MAX_ITER — спира алгоритъма след указаното брой итерации, max_iter.
    3. cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER — спиране на итерацията, когато някое от горните условия е изпълнено).

    - max_iter : Цяло число, определящо максималния брой повторения.
    - epsilon : Изисквана точност
  • опити: Флаг за указване на броя пъти, в които алгоритъмът се изпълнява, като се използва различно първоначално етикетиране. Алгоритъмът връща етикетите, които дават най-добра компактност. Тази компактност се връща като изход.
  • флагове: Този флаг се използва, за да се укаже как се вземат началните центрове. Обикновено за това се използват два флага: cv.KMEANS_PP_CENTERS и cv.KMEANS_RANDOM_CENTERS.

CV2.KMEANS Върната стойност

  • компактност : Това е сумата от квадратите на разстоянието от всяка точка до съответните им центрове.
  • етикети : Това е масивът от етикети (т.е. етикети, които обозначават кой пиксел към кой клъстер принадлежи)
  • центрове : Това е масив от центрове на клъстери

Сега извършваме процеса на групиране. Всеки отделен пиксел е присвоен на един от петте клъстера, можем да получим номера на клъстерите на всеки пиксел от списъка с етикети. За да видим сегментирано изображение, трябва да конструираме изображението с помощта на центрове и етикети. Сега центровете са под формата на float32, трябва да го конвертираме обратно в целочислен формат. И също така трябва да преобразуваме етикети в стойности на пиксели на съответните центрове. За щастие имаме операция в numpy, която може да се използва за конструиране на масив numpy, тази операция може да попълва масива numpy според избрани индекси. Пример, да предположим, че имаме numpy масив a= [1 2 3], така че ако трябва да конструираме numpy масив от [1 2 3 2 1], можем лесно да попълним с помощта на израза a [[0 1 2 1 0]]. Тук използваме същата тази концепция за създаване на пиксели според стойността на центровете и етикетите, присвоени на отделните пиксели. Последната стъпка е преоформянето на новосъздадения масив numpy до необходимия формат, тук получаваме формата на изображението, като просто използваме атрибута shape на изображението.

Връзки:

Бележник на Юпитер: Image_segmentation.ipynb