Python ve OpenCV Kullanarak SuperPixel İşlemi Uygulaması

2 1.339

Python ile OpenCV görüntü işleme kütüphanesi ile hazırlanmış örnek uygulamalara devam ediyoruz. Superpixel segmentasyon algoritmaları, nesne sınıfı tanıma ve tıbbi görüntü segmentasyonu gibi bilgisayar görme uygulamaları için bir ön işleme adımı olarak çok yararlı olabilir. Yararlı olması için, bu tür algoritmalar yüksek kaliteli süper pikseller vermelidir. Bunu sunabilen ve 0,5 milyon pikselden daha büyük görüntülerle ilgilenen pratik uygulamalar için ölçeklendirilebilen birkaç süper piksel algoritması vardır. Uygulanması basit olan ve çok düşük hesaplama ve bellek maliyeti için daha kaliteli süper pikseller çıkaran yeni bir O (N) karmaşıklık süper piksel segmentasyon algoritması sunuyoruz

Algoritma, süper piksellerin renk histogramlarına ve isteğe bağlı bir sınır terimine dayanan enerji işlevini optimize etmek için etkin bir tepe tırmanma algoritması kullanır. Enerji işlevi süper piksellerin aynı renkte olmasını teşvik eder ve sınır terimi etkinleştirilirse, süper piksellerin pürüzsüz sınırları vardır ve benzer şekildedir. Uygulamada, normal bir süper piksel ızgarasından başlar ve çözümü iyileştirmek için pikselleri veya piksel bloklarını sınırlarda hareket ettirir. Algoritma, tek bir CPU kullanarak gerçek zamanlı olarak çalışır.

OpenCV SuperPixel fonksiyonunun parametreleri :

  • image_width – İmajın Genişliği .
  • image_height –İmajın Yüksekliği
  • image_channels – Kullandığınızı imajın kanal sayısı.
  • num_superpixels – İstenen süper piksel sayısı. Gerçek sayının kısıtlamalar nedeniyle daha küçük olabileceğini unutmayın (görüntü boyutuna ve sayı düzeyine bağlı olarak). Gerçek numarayı almak için getNumberOfSuperpixels () öğesini kullanın.
  • num_levels – Blok seviyesi sayısı. Daha fazla seviye, segmentasyon daha doğru olur, ancak daha fazla bellek ve CPU süresine ihtiyaç duyar.
  • prior – 0 dan büyükse 3×3 şekil yumuşatma terimini etkinleştirir. Daha büyük bir değer daha düzgün şekiller sağlar. prior parametresi [0, 5] aralığında olmalıdır.
  • histogram_bins – Histogram bölmelerinin sayısı.
  • double_step – Doğruysa, daha yüksek doğruluk için her blok seviyesini iki kez yineleyin

OpenCV SuperPixel Uygulaması Kodları

import cv2 as cv
import numpy as np
import sys
import random

#read image
img = cv.imread('mockingbird-4907104_640.jpg') 
converted_img = cv.cvtColor(img, cv.COLOR_BGR2HSV)

height,width,channels = converted_img.shape
num_iterations = 12
prior = 4
double_step = False
num_superpixels = 400
num_levels = 8
num_histogram_bins = 10

seeds = cv.ximgproc.createSuperpixelSEEDS(width, height, channels, num_superpixels, num_levels, prior, num_histogram_bins)
color_img = np.zeros((height,width,3), np.uint8)
color_img[:] = (0, 0, 255)
seeds.iterate(converted_img, num_iterations)

# retrieve the segmentation result
labels = seeds.getLabels()

# labels output: use the last x bits to determine the color
num_label_bits = 2
labels &= (1<<num_label_bits)-1
labels *= 1<<(16-num_label_bits)

mask = seeds.getLabelContourMask(False)

# stitch foreground & background together
mask_inv = cv.bitwise_not(mask)
result_bg = cv.bitwise_and(img, img, mask=mask_inv)
result_fg = cv.bitwise_and(color_img, color_img, mask=mask)
result = cv.add(result_bg, result_fg)


cv.namedWindow('mask',0)
cv.namedWindow('result_bg',0)
cv.namedWindow('result_fg',0)
cv.namedWindow('result',0)

cv.imshow('mask',mask_inv)
cv.imshow('result_bg',result_bg)
cv.imshow('result_fg',result_fg)
cv.imshow('result',result)

cv.imwrite('mask.jpg',mask_inv)
cv.imwrite('result_bg.jpg',result_bg)
cv.imwrite('result_fg.jpg',result_fg)
cv.imwrite('result.jpg',result)

cv.waitKey(0)

Sonuçlar:

Kodları çalıştırdığımızda resmimiz üzerinde yukarıdaki gibi bir sonuç elde edeceğiz. Kodların çalışması için openCV ve OepnCV-Contrib kütüphanelerinin yüklü olması gerektiğini unutmayın. İşlem yapacağınız imajın da kodla aynı klasörde olduğundan emin olun.

Resmin Orjinal halini alttan indirebilirsiniz.


Python ve openCV açık kaynak kodlu görüntü işleme kütüphanesi kullanarak hazırlamış olduğumuz tüm örnek uygulamaları buradan, yüz tanıma uygulaması , video kaydetme ve video oynatma uygulaması, temel resim işlemleri örneklerine erişebilirsiniz.

Python öğrenmek isteyenler içinde sitemizde yer alan Python eğitimlerine göz atabilirsiniz.

Yorumlarınızı bekliyoruz.

2 Yorumlar
  1. Bilal Çiçek diyor

    Python ile konveyor banttaki yırtık ve hataları bulmaya çalışıyorum. 20 turda bir video kaydediyorum. Videoyu panoramic resme çevirip hata yüzey büyüklüğünü bulacağım. Ama videoyu paoramic resme çeviremedim.

    https://1drv.ms/v/s!AphyUNTXimgZgtdsFSgen5mpm9UYFQ?e=Vau2gb

    1. Halil İbrahim K. diyor

      https://pyimagesearch.com/2016/01/11/opencv-panorama-stitching/ burada fotografları panoramik yapmayla ilgili bir tutorial var. İsterseniz inceleyin. Olmazsa yine yardımcı olmaya çalışalım.

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bununla iyi olduğunuzu varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul etmek Mesajları Oku