Python ve OpenCV Kullanarak SuperPixel İşlemi Uygulaması
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.
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
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.