• Sonuç bulunamadı

Gömülü sistemler üzerinde openc tabanlı görüntü işleme kütüphanes ve kernel füzyon

N/A
N/A
Protected

Academic year: 2021

Share "Gömülü sistemler üzerinde openc tabanlı görüntü işleme kütüphanes ve kernel füzyon"

Copied!
82
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

GÖMÜLÜ SSTEMLER ÜZERNDE OPENCL TABANLI GÖRÜNTÜ “LEME KÜTÜPHANES VE KERNEL FÜZYON

HAKKI DO‡ANER SÜMERKAN

YÜKSEK LSANS TEZ BLGSAYAR MÜHENDSL‡

TOBB EKONOM VE TEKNOLOJ ÜNVERSTES FEN BLMLER ENSTTÜSÜ

TEMMUZ 2014 ANKARA

(2)

Fen Bilimleri Enstitü onay

Prof. Dr. Osman ERO‡UL Müdür

Bu tezin Yüksek Lisans derecesinin tüm gereksinimlerini sa§lad§n onaylarm.

Doç. Dr. Erdo§an DO‡DU Anabilim Dal Ba³kan

HAKKI DO‡ANER SÜMERKAN tarafndan hazrlanan GÖMÜLÜ SSTEM-LER ÜZERNDE OpenCL TABANLI GÖRÜNTÜ “LEME KÜTÜPHANES VE KERNEL FÜZYON adl bu tezin Yüksek Lisans tezi olarak uygun oldu§unu onaylarm.

Doç. Dr. O§uz ERGN Tez Dan³man Tez Jüri Üyeleri

Ba³kan : Yrd. Doç. Dr. Ahmet Murat Özbayo§lu

Üye : Doç. Dr. O§uz ERGN

(3)

TEZ BLDRM

Tez içindeki bütün bilgilerin etik davran³ ve akademik kurallar çerçevesinde elde edilerek sunuldu§unu, ayrca tez yazm kurallarna uygun olarak hazrlanan bu çal³mada orijinal olmayan her türlü kayna§a eksiksiz atf yapld§n bildiririm.

(4)

Üniversitesi : TOBB Ekonomi ve Teknoloji Üniversitesi

Enstitüsü : Fen Bilimleri

Anabilim Dal : Bilgisayar Mühendisli§i Tez Dan³man : Doç. Dr. O§uz ERGN

Tez Türü ve Tarihi : Yüksek Lisans  Temmuz 2014

Hakk Do§aner SÜMERKAN

GÖMÜLÜ SSTEMLER ÜZERNDE OPENCL TABANLI GÖRÜNTÜ “LEME KÜTÜPHANES VE KERNEL FÜZYON

ÖZET

Geli³en teknoloji ile birlikte, mobil sistemlerin hesaplama kapasitesi de artmakta-dr. Modern gömülü platformlar grak i³lemlerini daha iyi yapabilmek ve daha iyi bir arayüz sunabilmek için grak i³lem birimleri(GPU) bulundurmaktadrlar. Mo-bil aygtlarn, görüntü i³leme gibi yo§un hesaplama gücü gerektiren uygulamalar ba³arl bir ³ekilde çal³trabilmeleri amacyla baz mobil platform üreticileri kendi platformlarna OpenCL destekli GPU'lar koymaktadrlar. Böylelikle genel amaçl grak i³lem birimi(GPGPU) altyapsndan faydalanarak bu tür hesaplama yo§un i³leri yapabilmeyi hedeemi³lerdir. Bu sayede GPGPU altyapsnn sundu§u hesaplama gücünü, mobil platformlar için önemli bir kst olan güç verimlili§ini de sa§layarak yerine getirebilmektedirler.

Bu çal³mada, OpenCL tabanl, gömülü platformlar üzerinde çal³abilen bir görüntü i³leme kütüphanesi sunulmu³tur. Deneysel sonuçlar görüntü i³leme alannda bir standart haline gelen OpenCV ile kar³la³trlm³ ve ortalamada 7 kat hzlanma sa§lanm³tr.

Anahtar Kelimeler: GPGPU; OpenCL; Gömülü Sistemler;Paralel Hesaplama; Görüntü ³leme.

(5)

University : TOBB University of Economics and Technology

Institute : Institute of Natural and Applied Sciences

Science Programme : Computer Engineering

Supervisor : Assoc. Prof. O§uz ERGN

Degree Awarded and Date : M.Sc.  JULY 2014

Hakk Do§aner SÜMERKAN

OPENCL BASED IMAGE PROCESSING LIBRARY AND KERNEL FUSION ON EMBEDDED SYSTEMS

ABSTRACT

Embedded computing is an increasingly improving area. With every new genera-tion, the computation capacity of the mobile devices is improving. Contemporary mobile devices include a graphical processing unit (GPU) in order to oer better use interface in terms of graphics. As mobile devices require more performance to cope with computation-intensive applications, such as image processing, recently some embedded GPUs also included the support for OpenCL that allows the use of computation capacity of embedded GPUs for general purpose computing. Exploiting GPGPU on embedded platforms is also more ecient in terms of energy eciency.

In this thesis, we present a new OpenCL-based image processing library, which is specically designed to run on an embedded platform. Our results show that the functions of TRABZ-10 show 7x speedup on embedded platform over the functions of OpenCV on average.

Keywords: GPGPU; OpenCL; Embedded Systems;Parallel Computing; Image Processing.

(6)

TE“EKKÜR

Bana bu çal³mada ve yüksek lisans e§itimim süresince çe³itli konularda ara³trma olana§ sa§layan, uyarlar ve yönlendirmesi ile sonuca ula³mama yardmc olan Sayn tez dan³manm Doç. Dr. O§uz Ergin'e; tez jürimde yer alan de§erli hocalarma; ö§renim hayatm boyunca bana eme§i geçen tüm TOBB ETÜ ailesine,kymetli çal³ma arkada³larm Osman Seçkin “im³ek, Mustafa Çavu³, Hasan Hassan,Abdullah Giray Ya§lkç,Muhammet Özgür ve di§er Kasrga Mik-roi³lemciler Labaratuvar üyelerine;bu projeyi SAN-TEZ program kapsamnda destekleyen Bilim Sanayi ve Teknoloji Bakanl§na, çal³ma ortammz sa§lad§ için TOBB ETÜ Fen Bilimleri Enstitüsüne ve her zaman sabrla bizlere yardmc olan enstitü sekreteri Sayn Ülüfer Nayr'a te³ekkürlerimi sunarm.

Çal³malarm süresince her türlü yardm esirgemeden bana destek olan çok de§erli aileme minnet, ³ükran ve te³ekkürlerimi sunmay zevkli bir görev sayarm.

(7)

çindekiler

Özet iv

Abstract v

Te³ekkür vi

çindekiler vii

“ekil Listesi xii

Tablo Listesi xiii

1 GR“ 1

2 GRAFK “LEM BRMLER, GPGPU ve OPENCL 3

2.1 Grak ³lem Birimleri ve GPGPU Kavram . . . 3 2.2 OpenCL . . . 5 2.2.1 OpenCL Platform Modeli . . . 6

(8)

2.2.2 OpenCL Yürütme Modeli . . . 7

2.2.3 OpenCL Bellek Modeli . . . 9

2.2.4 OpenCL Programlama Modeli . . . 10

2.2.5 Gömülü Platformlar üzerinde OpenCL . . . 13

3 TRABZ-10 GÖRÜNTÜ “LEME KÜTÜPHANES 14 3.1 Giri³ . . . 14

3.1.1 Dizi ve Matris ³lemleri . . . 15

3.1.2 Filtreleme ³lemleri . . . 20

3.1.3 Morfolojik Operasyonlar . . . 31

3.1.4 Dönü³üm ³lemleri . . . 37

3.1.5 Renk Kümesi Dönü³üm ³lemleri . . . 40

3.1.6 Histogram ³lemleri . . . 43

4 GEL“TRME ve YLE“TRME YÖNTEMLER 45 4.1 Giri³ . . . 45

4.1.1 Vektör Operasyonlarn Kullanarak Her ³ Parçac§na Daha Çok Veri . . . 46

4.1.2 Yerel(Local) Bellek Kullanm . . . 48

4.1.3 Dar Bo§az Olu³turan Bölümleri Belirlemek . . . 49

(9)

4.1.5 Kernel Füzyon . . . 51 5 SONUÇLAR 57 5.1 Performans Sonuçlar . . . 57 5.2 Gelecek Çalsmalar . . . 64 KAYNAKLAR 65 ÖZGEÇM“ 69

(10)

“ekil Listesi

2.1 OpenCL Platform Modeli . . . 6

2.2 OpenCL Yürütme Modeli . . . 8

2.3 OpenCL Yürütme Modeli . . . 8

2.4 OpenCL Bellek Modeli . . . 10

3.1 Matris Çarpm ³lemi . . . 18

3.2 Konvolüsyon Çal³ma Örne§i . . . 22

3.3 Laplace Uygulanm³ Resim Örne§i . . . 23

3.4 Laplace Operatör Örnekleri . . . 24

3.5 Sobel Uygulanm³ Resim Örne§i . . . 24

3.6 Sobel Operatör Örnekleri . . . 25

3.7 Medyan Uygulanm³ Resim Örne§i . . . 26

3.8 Medyan De§erinin Bulunmas . . . 26

3.9 Gauss Operatörü(σ = 1.0) . . . 28

(11)

3.11 3 x 3 NBOX Operatörü . . . 29

3.12 Canny Uygulanm³ Resim Örne§i . . . 30

3.13 Canny Kenar Tanma Algoritma Admlar . . . 31

3.14 Görüntü Üzerinde "cross" Yapsal Eleman ile "Hit" ve "Miss" . . 32

3.15 A³nma Uygulanm³ Resim Örne§i . . . 34

3.16 Genle³me Uygulanm³ Resim Örne§i . . . 35

3.17 Açma Uygulanm³ Resim Örne§i . . . 36

3.18 Kapama Uygulanm³ Resim Örne§i . . . 37

3.19 YUV420 Yaps . . . 41

4.1 Medyan Filtre OpenCL Kernel . . . 46

4.2 Medyan Filtre OpenCL Kernel 2 . . . 47

4.3 Medyan Filtre OpenCL Kernel 3 . . . 49

4.4 Kernel Füzyon Dü³ük Karma³klk Grubu Hzlanmalar . . . 53

4.5 Kernel Füzyon Orta Karma³klk Grubu Hzlanmalar . . . 54

5.1 Filtreleme Fonksiyonlar Çal³ma Zamanlar(Gömülü Platform) . . 59

5.2 Filtreleme Fonksiyonlar Çal³ma Zamanlar(Masaüstü Platform) . 60 5.3 Her iki test platformu üzerinde OpenCV ile kar³la³trma sonucu kazanlan hzlanma oranlar . . . 61

(12)

5.5 Dönü³üm Fonksiyonlar Çal³ma Zamanlar(Masaüstü Platform) . 62 5.6 Her iki test platformu üzerinde OpenCV ile kar³la³trma sonucu

kazanlan hzlanma oranlar . . . 63 5.7 Matris ³lemleri için Çal³ma Zamanlar(Gömülü Platform) . . . . 64

(13)

Tablo Listesi

2.1 OpenCL Bellek Hiyerar³isi . . . 10

5.1 Test Sistemleri Spesikasyonlar . . . 57 5.2 Vivante GC2000 Bellek Hiyerar³isi . . . 58

(14)

1. GR“

Günümüzde grak i³lem birimleri yüzlerce paralel i³lem birimi barndrabilirken bu i³lem birimleri binlerce paralel i³ parçac§ çal³trabilmektedir. Bu donanmsal altyap grak i³lem birimlerinin genel amaçl olarak kullanlmaya ba³lanmas ile programlanabilir hale gelmi³ ve grak i³lem birimleri aritmetik i³lem gücü ve bellek bant geni³li§i bakmndan merkezi i³lem birimlerinin performansna ula³m³ ve hatta önüne geçmi³tir.

Grak i³lem birimlerinin bu performans ve güç verimlili§inin merkezi i³lem birim-lerinin önüne geçmesi sonucunda ise bilgisayar endüstrisi çok çekirdekli paralel mimariler üzerinde çal³malara odaklanm³tr. Bunun sonucu olarak ise GPU programlama kütüphaneleri iyile³tirilmeye ba³lanm³, OpenGL (Open Graphics Library) [1] grak kütüphanesi entegrasyonu ve OpenCL (Open Computing Lan-guage) [2], CUDA gibi farkl mimariler üzerinde çal³abilen diller geli³tirilmi³ ve grak i³lem birimleri yaygn olarak genel amaçl olarak kullanlmaya ba³lanm³tr. OpenCL, (NVIDIA ve AMD gibi) çe³itli üreticilerin masaüstü GPU'lar da dahil olmak üzere çe³itli platformlarda çal³abilen, platformdan ba§msz, açk bir standart olup, GPU, CPU, FPGA ve OpenCL ile kullanlabilen di§er her türlü i³lem birimi gibi birçok i³lem kayna§nn e³ zamanl kullanmn destekler. OpenCL açk bir standart oldu§undan, her türlü üretici, ürünlerinde OpenCL deste§i verebilir.

Geni³ bir yelpazede uygulamalarla uyumlu çal³an OpenCL'in yaygn kullanm alanlarndan biri, görüntü / video i³lemedir. Görüntü i³leme alanndaki en önemli zorluklardan biri, yüksek do§ruluk ve gerçek zamanl i³leme sa§lamak için yüksek i³lem gereksinimidir. Video çözünürlüklerinin ve veri boyutlarnn artmas sonucunda, video karelerinin i³lenmesi srasnda gerçek zamanl performans elde etmek zorla³maktadr. Buna ek olarak, cep telefonu, tablet gibi çe³itli gömülü cihazlarda yüksek çözünürlüklü video desteklenir. Bu da, ba³ka bir yaygn sorun olan, performans kayb ya³amakszn dü³ük güç gereksinimini ortaya çkarr.

(15)

Güç verimlili§i ve yüksek veri paralelli§ine sahip hesaplamaya olanak tanyan GPGPU(General Purpose GPU), tasarmclara seçenek sunmaktadr. Ço§u gö-rüntü i³leme algoritmas, veri paralelli§ine sahip uygulamalar üzerinde iyi bir performans gösterir. Dolaysyla bu algoritmalar, GPU'larn tek buyruk çoklu veri (SIMD) mimarisinden faydalanr ve etkin bir biçimde paralel hale getirilebilir. Ancak, tüm görüntü i³leme algoritmalarnn veri paralelli§i yakla³mna uyum gösterdi§ini söylemek mümkün de§ildir ve bu algoritmalar, GPU'lara aktarl-d§nda kayda de§er bir hzlanma sa§lamaz. Görüntü i³leme algoritmalarnn, GPU'larn çok büyük ölçekte paralel mimarisine iyi uyum sa§lamasna kar-³n, algoritmalarn bazlar, performansta hzlanma sa§lamay ba³aramaz. Buna ek olarak, GPU'larn donanm kstlamalar nedeniyle, bazlarnn aktarlmas mümkün de§ildir. Bunlarn tümüne ek olarak, gömülü mimari kstlamalar ek kstlamalar getirir ve bu durum, belirli i³levlerin GPU'ya aktarlmasn zorla³trr.

Grak i³lem birimlerinin genel amaçl olarak kullanmnn kolayla³mas ve bunun gömülü sistemler üzerinde de desteklenmesi sonucu bu altyapnn kulla-nlmasna yönelik çe³itli ara³trmalar olmu³tur. Görüntü i³leme algoritmalarnn da SIMD yapsna uygun , paralel olarak çal³trlabilen algoritmalar olmas nedeniyle bu tezde gömülü sistemler üzerinde de çal³abilen bir görüntü i³leme kütüphanesi geli³tirilmi³tir. OpenCL tabanl olarak geli³tirilen bu kütüphane OpenCL destekli tüm aygtlarda çal³abilmektedir. Bu tezde sunulan görüntü i³leme kütüphanesi fonksiyonel ve performans sonuçlar açsndan bu alanda bir standart haline gelmi³ bir kütüphane olan OpenCV ile kar³la³trlm³tr.Tezin geri kalan ksm ³u ³ekilde düzenlenmi³tir. 2. Bölümde OpenCL standardnn ana yaps, çal³ma prensibi ve mimarisi hakknda bilgilendirme yaplm³tr. 3. Bölümde geli³tirdi§imiz kütüphanede bulunan fonksiyonlar ve algoritmalar hakknda açklamalar yaplm³ ve baz algoritmalarn implementasyonlar ile ilgili bilgiler verilmi³tir. 4. Bölüm algoritmalarn geli³tirilmesinden sonra yaplan iyile³tirme metotlarndan bahsederken 5. Bölüm performans sonuçlarn OpenCV ile kar³la³trarak sunmaktadr.

(16)

2. GRAFK “LEM BRMLER, GPGPU ve

OPENCL

2.1 Grak ³lem Birimleri ve GPGPU Kavram

Grak i³lem birimleri(GPU) bilgisayarlarda ekrana görüntü vermeye yarayan kartlardr. Esas olarak grak ile ilgili i³lemleri yapmalarnn yannda günümüzde genel amaçl olarak da kullanlmaya ba³lanm³tr. Genel amaçl grak i³lem birimi(GPGPU) yapsnn öne çkmaya ba³lamasyla yüksek performansl ve verimli bir ³ekilde i³lem yapma amaçl kullanlmaya ba³lanm³tr. Grak i³lem birimlerinin, merkezi i³lem birimlerinden farkl klan temel özellik az sayda güçlü i³lem birimlerinden de§il de çok sayda ve basit i³lemleri yapmak için tasar-lanm³ i³lem birimlerinden olu³masdr. Bu sayede GPU'lar tekli buyruk çoklu veri(SIMD) yapsnda çal³arak ilgili veriyi paralel bir ³ekilde i³leyebilmektedirler. GPGPU bir çok uygulama alannda kazanmlar getirirken özellikle ses i³leme, görüntü i³leme, ³ifreleme, bioinformatik ve baz bilimsel hesaplamalar gibi büyük bir veri üzerinde küçük i³ parçacklarnn çal³abilmesine uygun algoritmik admlar olan uygulama alanlarnda ba³arldrlar. Bu tezde görüntü i³leme alanna yo§unla³lm³tr. Bu alanda en önemli zorluklardan biri gerçek zamanl video i³lemeyi yakalayabilmek için yüksek hesaplama gereksinimidir. Gün geçtikçe büyüyen resim çözünürlükleri ve veri büyüklükleri nedeni ile gerçek zamanl video i³leme daha zor bir hale gelmektedir. Bunun yannda geli³en teknolojinin sundu§u i³lem gücü bu zorlu§u nispeten kaldrmaktadr. Bunlara ek olarak yüksek çözünürlüklü videolar cep telefonlar, tabletler gibi gömülü sistemler üzerinde de desteklenmektedir. Bu durum ise di§er bir önemli problem olan dü³ük güç gereksinimini ön plana çkarmaktadr. Buna kar³n GPGPU kullanclara güç tüketimi açsnda verimli paralel hesaplama kabiliyeti sunmaktadr. Bir çok görüntü i³leme kütüphanesi veri baznda paralelle³tirmeye uygun algoritmalardan olu³maktadr. Bu sayede SIMD yapsna uygun olan GPU'lar üzerinde verimli bir ³ekilde paralelle³tirilebilirler. Fakat bütün görüntü i³leme algoritmalar paralel

(17)

olarak GPU'lar üzerinde geli³tirilebilir diyemeyiz. Üzerinde geli³tirme yapla-cak olan GPU'nun donanmsal kstlarnn yannda gömülü sistemler üzerinde çal³mann verdi§i baz ek kstlar da bulunmaktadr. Herhangi bir görüntü i³leme algoritmasn GPU'lar üzerinde paralel olarak geli³tirmede en büyük engel bu kstlardr. Bunlar tezin ilerleyen bölümlerinde anlataca§ gibi ana olarak bellek kstlar ve algoritmik yapdan kaynaklanan kstlar gibi maddelerden bahsedilebilir.

GPGPU'larn daha iyi performans elde etmek için görüntü i³leme i³lemlerinde kullanlmas oldukça yaygnla³maktadr. Önce DirectX ve OpenGL ile ba³layan bu akm günümüzde daha çok OpenCL ve CUDA ile devam etmektedir. Bu ko-nuda giri³imler OpenGL ve DirectX uygulama programlama arayüzlerinin(API) geli³tirilmesiyle, GPU shader çekirdeklerinin ve programlanabilir boru-hattnn GLSL kullanarak geli³tirmek olmu³tur[2, 5]. Genel amaçl GPU modeli ilk olarak programlanabilir shader altyapsn kullanarak geli³tirilmi³tir. Programlanabilir shader altyaps kullanlarak genel amaçl GPU modeli elde edilmi³tir. GLSL, sadece grak shader kodu de§il, ayn zamanda genel amaçl hesaplama da sa§layan shader programlama dilidir.

GPU'larn hesaplama ve programlama kabiliyetlerini de§i³tiren NVidia, "Com-pute Unied Device Architecture(CUDA)"[11] geli³tirerek, GPU ve GPGPU'larn tekli komut çoklu i³ parçac§ (SIMT) ve tekli buyruk çoklu veri(SIMD) mi-marisini desteklemesini sa§lam³tr. Bu mimariler, tek bir komutun birçok i³ parçac§ tarafndan kullanlmasna olanak sa§layp, birden çok veri i³leyebilir ve böylece, büyük miktarda performans kazanc ortaya koyar. CUDA mimarisinin ve ilgili programlama arayüzlerinin geli³tirilmesinin ardndan Apple önderli§inde altyaps olu³turulan ve Khronos tarafndan spesikasyonlar belirlenen OpenCL sunuldu. OpenCL platform ba§msz bir yani farkl üreticilerin bir çok farkl mimarisi üzerinde ko³turulabilen bir standart iken CUDA sadece NVIDIA platformlarnda ko³turulabilen bir alt yaps sunmaktadr. OpenCL CPU, GPU, DSP,FPGA gibi bir çok hesaplama birimi üzerinde çal³abilmektedir. Bunun yannda OpenCL açk bir standart olmasndan dolay herhangi bir üretici istedi§i ³ekilde implement edebilir. Bu tezde belirtildi§i üzere geli³tirdi§imiz kütüphane

(18)

gömülü sistemleri ve ba³ka mimarileri de destekleyece§inden dolay OpenCL kullanlarak geli³tirilmi³tir.

Görüntü i³leme uygulamalarnda bu performanstan faydalanmak için, GPGPU'lar kapsaml bir biçimde kullanlm³tr. Baz ara³trmalarda görüntü i³leme fonksi-yonlarnn sfrdan uygulanmasna kar³n[12], bazlarnda bu fonksiyonlar mevcut kütüphaneler üzerinden uygulanr[13, 14]. Belirli görüntü i³leme algoritmalar hakknda yaplm³ ara³trmalar da mevcuttur. Bunlara ek olarak, Luo ve ark. Canny kenar alglama algoritmasn güçlendirmek için CUDA kullanm³tr [15]. Singhal ve ark. elde ta³nan cihazlar için birçok görüntü i³leme, renk çevrim ve dö-nü³üm algoritmas ile Harris kö³e alglama ve gerçek zamanl video boyutlandrma gibi uygulamalar yürütmü³ olup, bu amaç için OpenGL ES[4] ile doku(texture) donanmn kullanm³tr[7]. GPUCV[8], MinGPU[9] ve OpenVIDIA[10] gibi, açk kaynak kodlu ba³ka projeler de mevcuttur. GPUCV ve MinGPU'nun ayn anda GPU ve GPGPU i³levselliklerinin kullanlmasn desteklemesine kar³n, OpenVIDIA yalnzca CUDA kullanr ve ltreleme fonksiyonlar ba³ta olmak üzere bir dizi görüntü i³leme fonksiyonunu uygular. Bu ve benzer geli³melerin ardndan CUDA ve OpenCL bu kullanm üst seviyelere ta³narak günümüzdeki yo§unlu§una ula³m³tr. Geli³tirdi§imiz görüntü i³leme kütüphanesi OpenCL altyaps kullanlarak implement edilmesi ile nedeniyle OpenCL daha detayl bir ³ekilde anlatlm³tr.

2.2 OpenCL

OpenCL farkl i³lem birimlerinde(GPU, DSP, FPGA, CPU. . ) heterojen olarak paralel programlama yetene§i sunan bir programlama arayüzüdür(API). Khronos grup tarafndan spesikasyonlar belirlenen ve tanmlanan bu arayüz bir çok farkl üretici tarafndan implement edilmektedir. OpenCL standardn ana hatlaryla anlatabilmek için 4 ana model altnda inceleyebiliriz.

(19)

• OpenCL Bellek Modeli • OpenCL Yürütme Modeli • OpenCL Programlama Modeli

2.2.1 OpenCL Platform Modeli

OpenCL platform modeline göre OpenCL platformu bir "host" ve bir veya birden çok OpenCL "device" barndrr. "Host" paralel i³lem birimlerinde çal³trlacak olan program parçac§nn ana kongrasyonlarn yapan i³lem birimi iken "device" bu kod parçac§nn paralel olarak çal³trld§ i³lem birimidir. OpenCL device bir veya birden fazla yürütme birimine(Compute Units-CEs) ayrlm³tr ve bu yürütme birimleri de bir veya birden çok i³lem biriminden(Processing Units-PEs) olu³ur. OpenCL platform modeli “ekil 2.1'de gösterilmi³tir.

(20)

2.2.2 OpenCL Yürütme Modeli

OpenCL yürütme modeli iki ana bölümden olu³ur. OpenCL device üzerinde çal³an ksmna "kernel" denirken, host tarafnda çal³an ksma host program denir. Genellikle grak kartlar ve merkezi i³lem biriminden olu³an bir platformda CPU üzerinde çal³an ksma host program, GPU üzerinde çal³an ksma ise kernel diyebiliriz. Ancak OpenCL destekli CPU'lar üzerinde de kernel program çal³trlabilir. Bu durumda CPU'larn biri host olurken di§erleri device durumunda çal³acaktr.

OpenCL yürütme modeli daha çok kernellarn çal³ma altyapsn belirleyen modeldir. Host tarafndan, bir kernel program, device tarafna gönderildi§inde indeks alan olu³turulur ve kernellarn bu indeks aral§nda kendi verileri üze-rinde çal³an i³ parçacklarn(work-item) barndrlr. Her bir i³-parçac§ indeks alannda bulunan ve kendi kulland§ veri noktas ile ayrt edilir. Yani her bir i³-parçac§ bu indeks alannda kullandklar verinin ID'lerine göre bir di§erinden ayrt edilebilir. Bu ID'ler genel indeks ve yerel indeks bilgisini barndrrlar. ³-parçacklar , kernellar tarafndan e³ zamanl olarak yürütülür. Her bir i³-parçac§ ayn kernel fonksiyonunu indeks alanndan kendine yöneltilen veri üzerinde di§er i³-elemanlar ile paralel olacak ³ekilde yürütülür. Bir i³-eleman di§erinden genel ve yerel indeks bilgisi kullanlarak ayrt edilebilir. Bir ve ya birden çok i³-parçac§, i³-grubunu(work-group) olu³turur. ³-grubu altndaki i³-parçacklar bir sonraki bölümde daha detayl anlataca§mz yerel bellek türünü ortak olarak kullanabilirler. Tüm veriyi kapsayan indeks alanna NDRange denir. OpenCL yürütme modeli “ekil 2.2 ve “ekil 2.3'de gösterilmi³tir.

(21)

“ekil 2.2: OpenCL Yürütme Modeli

(22)

2.2.3 OpenCL Bellek Modeli

Bellek hiyerar³isini ve yapsn detaylandran bellek modeli, OpenCL arayüzünde kullanm alanlarna, büyüklüklerine ve eri³im sürelerine göre kademelere ay-rabilece§imiz bir bellek modeli bulunmaktadr. Bu modele göre 4 çe³it bellek bulunmaktadr.

2.2.3.1 Genel(Global) Bellek:

Bu bellek alanna tüm i³-gruplar ve bu i³-gruplar altndaki tüm i³-parçacklar okuma ve yazma yapabilirler.

2.2.3.2 De§i³mez(Constant) Bellek:

Genel belle§in, bir kerneln çal³trlmas srasnda sabit kalan bölümüdür. De§i³mez belle§e yerle³tirilen bellek nesneleri, ana bilgisayar tarafndan atanr ve ba³latlr.

2.2.3.3 Yerel(Local) Bellek:

Bir çal³ma grubunun yerel bellek bölgesidir. Bu bellek bölgesi, söz konusu çal³ma grubundaki tüm i³ parçacklarnn payla³t§ de§i³kenler atamak için kullanlabilir. Bu belle§i, OpenCL cihaz üzerindeki belle§in ayrlm³ bölgeleri olarak uygulamak mümkündür. Alternatif olarak, yerel bellek bölgesi, genel belle§in bölümleri üzerine e³lenebilir.

2.2.3.4 Özel(Private) Bellek:

Belle§in, bir çal³ma unsuruna özel bölgesidir. Bir çal³ma unsurunun özel belle§i üzerinde tanmlanan de§i³kenler, ba³ka bir çal³ma unsuru tarafndan görülmez.

(23)

Tablo 2.1 OpenCL bellek modeli genel hiyerar³isi hakknda özet bilgiyi sunmak-tadr.

Tablo 2.1: OpenCL Bellek Hiyerar³isi

Genel De§i³mez Yerel Özel

Host Dinamik Tahsis

Yazma/Okuma Yetkisi Dinamik Tahsis Yazma/Okuma Yetkisi Dinamik Tahsis Yazma/Okuma Yetkisi Dinamik Tahsis Yazma/Okuma Yetkisi

Kernel Dinamik Tahsis

Yazma/Okuma Yetkisi Dinamik Tahsis Yazma/Okuma Yetkisi Dinamik Tahsis Yazma/Okuma Yetkisi Dinamik Tahsis Yazma/Okuma Yetkisi

Bellek alanlar ve bu alanlarn platform modeli ile olan ba§lantlar “ekil 2.4'de gösterilmi³tir.

“ekil 2.4: OpenCL Bellek Modeli

2.2.4 OpenCL Programlama Modeli

OpenCL yürütme modeli, veri paralel ve görev paralel programlama modellerini ve bu modellerin melez modellerini destekler. OpenCL'in tasarmnn i³lemesini sa§layan birincil model, veri paralel modeldir.

(24)

2.2.4.1 Veri Paralel Programlama Modeli

Veri paralel programlama modeli, hesaplamay, bir buyruk dizisinin çoklu bel-lek elemanna uygulanmas ³eklinde tanmlar. ³-parçacklar ve verilerin i³-parçacklar ile nasl e³lenece§i, OpenCL yürütme modeliyle özde³le³tirilen indeks alan tarafndan tanmlanr. Mutlak veri paralelli§ine sahip bir modelde, i³-parçacklar ile bellek nesnesinde, çekirde§in üzerinde paralel olarak yürütülebi-lece§i eleman says arasnda bire bir e³leme mevcuttur. OpenCL, mutlak birebir i³lemenin gerekli olmad§ veri paralel programlama modelinin daha gev³ek bir versiyonunu uygular.

OpenCL, hiyerar³ik bir veri paralel programlama modeli sunar. Hiyerar³ik alt bölünmeyi belirtmenin iki yolu vardr. Açk modelde, paralel olarak yürütülmesi gereken toplam i³-parçac§ saysn ve i³-parçacklarnn i³-gruplarna nasl bölünece§ini programc tanmlar. Kapal modelde, programc yalnzca paralel olarak yürütülecek i³-parçacklarnn toplam saysn belirtir ve i³-gruplarna bölünme, OpenCL'in uygulamasyla yönetilir.

2.2.4.2 Görev Paralel Programlama Modeli

OpenCL görev paralel programlama modeli, çekirde§in tek bir örne§inin herhangi bir indeks alanndan ba§msz yürütüldü§ü bir model tanmlar. Bu da mantksal olarak, çekirde§i, tek bir i³-parçac§ içeren i³-grubuna sahip bir hesaplama ünitesi üzerinde yürütmeye denktir. Bu model kapsamnda, kullanclar paralelli§i ³öyle ifade eder:

- Device tarafndan implement edilmi³ vektör veri tiplerini kullanmak - Birden fazla görevi kuyruk halinde sralayarak ve(ya)

- OpenCL'e ortagonal bir programlama modeli ile geli³tirilen kernellar kuyruk halinde sralayarak

(25)

2.2.4.3 Senkronizasyon

OpenCL'de iki senkronizasyon alan mevcuttur: - Tek bir i³ grubundaki i³-parçacklar

- Tek bir context içerisinde buyruk kuyru§una sokulmu³ buyruklar

Tek bir i³-grubu içerisindeki i³-parçacklar arasndaki senkronizasyon, i³-grubu bariyeri(barrier) kullanlarak gerçekle³tirilir. Bir i³-grubunun tüm i³-parçacklarn, bariyerin ötesinde yürütmeye devam etmelerine izin verilmeden önce bariyeri yürütmesi gerekir. ³-grubu bariyerinin, çekirde§i yürüten i³-grubunun içindeki tüm i³-parçacklarnn tümü tarafndan kar³lanmas veya hiçbiri tarafndan kar³lanmamas gerekir. ³-gruplar arasnda senkronizasyon için bir mekanizma mevcut de§ildir.

Buyruk kuyruklarnda buyruklar arasndaki senkronizasyon noktalar ³unlardr: - Buyruk kuyru§u bariyeri: Buyruk-kuyruk bariyeri, daha önce kuyru§a sokulan buyruklarn yürütülmesinin sona ermesini ve bunun sonucunda bellek nesnele-rinde gerçekle³en her türlü güncellemenin, sonrasnda kuyru§a sokulan buyruk-lara, bu komutlarn yürütülmeye ba³lamasndan önce görünür olmasn sa§lar. Bu bariyer, ancak tek buyrukl kuyruktaki buyruklar arasnda senkronizasyon sa§lamak için kullanlabilir.

- Yeni bir fonksiyonu beklemek: Buyruklar kuyru§a sokan tüm OpenCL API fonksiyonlar, güncelledi§i komutu ve bellek nesnelerini belirleyen bir olay dön-dürür . Olaya e³lik eden daha sonraki bir buyru§a, bu bellek nesnelerine yaplan güncellemelerin, buyruk yürütülmeye ba³lamadan önce görünür oldu§u garanti edilir.

(26)

2.2.5 Gömülü Platformlar üzerinde OpenCL

Di§er Khronos standartlarnn aksine, OpenCL'in ES (gömülü sistemler) özelli§i mevcut de§ildir fakat gömülü prol, OpenCL özelliklerine dahildir. Gömülü prol, OpenCL standardnn bir alt kümesidir ve üreticilerin gerekli fonksiyonlar uygulamas gerekir. Örne§in, gömülü prolin double, long veya half veri tiplerini desteklemesi gerekmez, yuvarlama modlar sfra yuvarlama gibi orta düzeyde olabilir veya 3D görüntü deste§i zorunlu de§ildir.

OpenCL'in gömülü prol özelli§ine sahip olmasna kar³n, yakn zamana kadar buna uygun cihaz veya üretici yoktu. Gömülü prolli OpenCL üzerinde uy-gulamak için baz çal³malarn yaplmasna kar³n, donanm deste§i olmadan, bunlar olmas gerekti§i kadar verimli de§ildi[23]. Bu ara³trmalar arasndaki ana kir, OpenGL ES 2. 0 destekleyen gömülü sistem GPU'larnn kullanlmasyd. OpenGL ES 2. 0, programlanabilir shader'larn kullanmna olanak sa§lar ve OpenGL arayüzü sayesinde, kapsaml bir çal³ma ile kullan³l fonksiyonlar uygulanabilir[24]. Bu tezde kullanlan, Vivante Corporation'n GPGPU'lar, OpenCL 1.1 Gömülü versiyonunu desteklemektedir.

GPGPU üzerindeki en yaygn uygulamalar, hzlandrc görüntü i³leme algo-ritmalardr. Görüntü i³leme i³lemleri, birçok piksel üzerinde ayn hesaplamay gerçekle³tirir, tek komut çoklu veri (SIMD) mimarisini kullanabilir ve CPU uygulamalarndan daha iyi performans gösterebilir.

Görüntü i³leme i³lemlerinde daha iyi bir performans elde etmek için Genel Amaçl Grak ³leme Ünitelerinin (GPGPU) kullanlmas, son yllarn en yaygn konularndan biridir. Bu konuda ilk yakla³mlar, GPU'larn shader çekirdekleri ve GLSL kullanan programlanabilir boru-hatt programlanmas için OpenGL ve DirectX API'lerinin kullanlmasn içerir. CUDA ve OpenCL'in geli³tirilmesi, GPGPU'larn görüntü i³leme ve di§er uygulamalar için kullanmn en üst düzeye çkarm³tr.

(27)

3. TRABZ-10 GÖRÜNTÜ “LEME

KÜTÜPHANES

3.1 Giri³

TRABZ-10, gömülü sistemler üzerinde çal³trlmaya uygun olarak geli³tirilmi³ bir görüntü i³leme kütüphanesidir. C, C++ ve OpenCL tabanl olan bu kütüphane Linux ve Windows i³letim sistemleri üzerinde test edilmi³ ve çal³r durumdadr. Bu kütüphanenin geli³tirilme amac gömülü sistemler üzerinde çal³abilen ve OpenCL'in sundu§u paralel hesaplama altyapsn kullanabilen ve bu sayede görüntü i³leme uygulamalarn daha az güç kullanarak ve daha hzl bir ³ekilde çal³trabilmektir. Gömülü sistem üzerinde geli³tirme ve test Freescale i. Mx6q platformunda yaplm³tr. Bu platform OpenCL destekli Vivante GC2000 GPU'ya sahip bir platformdur. Freescale i. Mx6q platformu güçlü ve verimli bir platform olmasna ra§men baz dezavantajlara da sahiptir. Bu eksiklikler mobil bir platform olmasndan ve do§al olarak baz ödünle³melerin verilmesinden dolay kaynaklanan problemlerdir. Dü³ük güç tüketimine sahip, küçük boyutlu bir GPGPU üretebilmek için Vivante, performanstan bir miktar ödün vermi³tir. Cihaz üzerinde küçük boyutlu bir bellek ve snrl sayda yazmaç mevcuttur. Yerel bellek, çip üzerinde de§il, genel belle§in bir parçasdr. Bu nedenle, yerel belle§in kullanlmas performans yükseltmez. CPU'lar kayan nokta i³lemlerinde daha yüksek hassasiyette i³lem yapabildikleri için, sonuçlar arasnda hassasiyetten kaynaklanan farklar olabilir.

TRABZ-10 görüntü i³leme kütüphanesi fonksiyonlar ana olarak 6 grup altnda toplanm³tr. Bu gruplar ³u ³ekildedir;

• Dizi ve Matris ³lemleri • Filtreleme ³lemleri • Morfolojik Operasyonlar

(28)

• Dönü³üm ³lemleri

• Renk Küremsi Dönü³üm ³lemleri • Histogram ³lemleri

3.1.1 Dizi ve Matris ³lemleri

Bu grupta bulunan fonksiyonlarn altnda temel matris i³lemleri bulunmaktadr. Bu i³lemler matris toplama, çkarma, çarpma, tersini alma gibi fonksiyonlardr. Matris i³lemleri genel yaps itibari ile GPU üzerinde i³lemeye uygun i³lemlerdir. Temel olarak yaplan tek bir i³lem bütün matris elemanlar üzerinde ayn ³ekilde yaplaca§ndan SIMD yapsn oldukça verimli bir ³ekilde kullanabilmektedir. Bu nedenle bu grup altnda bulunan fonksiyonlarn bir ço§u GPU üzerinde gerçekle³tirilmi³ ve önemli performans kazanmlar elde edilmi³tir. Min,max gibi matris üzerinde en büyük veya en küçük de§eri bulmaya yarayan baz fonksiyonlar ise GPU performansn olumsuz etkileyecek ³ekilde dallanmalara sebep oldu§u için CPU üzerinde geli³tirilmi³tir. Bunlara ek olarak determinant alma ve matrisin tersini alma i³lemleri de CPU üzerinde geli³tirilmi³tir. Bu fonk-siyonlar algoritma yaplar nedeniyle özyinelemeli olarak çal³maktadr. OpenCL özyinelemeli fonksiyonlar desteklemedi§i için bu fonksiyonlar için özyinelemeli olmayan algoritmalar kullanlabilece§i gibi CPU üzerinde özyinelemeli olarak da gerçekle³tirilebilirler. Bu algoritmalar üzerinde yaplan çal³malarda CPU üzerinde geli³tirmenin daha verimli olaca§ görüldü§ü için bunlar CPU üzerinde özyinelemeli olarak gerçekle³tirilmi³tir.

Matris i³lemleri altnda gerçekle³tirilen fonksiyonlar ve detaylar ³u ³ekildedir;

3.1.1.1 operator+ :

Matris toplama i³lemi yapmaktadr. + Operatoru overload edilmi³ olup tanml iki matris için Ci,j = Ai,j+ Bi,j i³lemi yaplr.

(29)

3.1.1.2 operator+ (skalar) :

Matris toplama i³lemi yapmaktadr. + Operatoru overload edilmi³ olup tanml bir matris ve parametre olarak alnan skalar bir de§erin toplam için kullanlr. Matrisin tüm elemanlar bu skalar de§er ile toplanr. Ci,j = Ai,j+ k i³lemi yaplr.

3.1.1.3 operator- :

Matris çkarma i³lemi yapmaktadr. - Operatoru overload edilmi³ olup tanml iki matrisi için Ci,j = Ai,j− Bi,j i³lemi yaplr.

3.1.1.4 operator- (skalar) :

Matris çkarma i³lemi yapmaktadr. - Operatoru overload edilmi³ olup tanml bir matristen parametre olarak alnan skalar bir de§er çkarlmaktadr. Matrisin tüm elemanlarndan bu skalar de§er ile çkarlr. Ci,j = Ai,j − k i³lemi yaplr.

3.1.1.5 operator/ (skalar) :

Matris bölme i³lemi yapmaktadr. / Operatoru overload edilmi³ olup tanml bir matris ve parametre olarak alnan skalar bir de§ere bölüm için kullanlr. Matrisin tüm elemanlar bu skalar de§er ile bölünür. Ci,j = Ai,j/k i³lemi yaplr.

3.1.1.6 operator* :

Matris çarpma i³lemi yapmaktadr. * Operatoru overload edilmi³ olup tanml iki matris için Ci,j = Ai,jxBi,j i³lemi yaplr.

(30)

3.1.1.7 operator*(skalar) :

Matris çarpma i³lemi yapmaktadr. * Operatoru overload edilmi³ olup tanml bir matrisin tüm elemanlar parametre olarak alnan skalar bir de§er ile çarplr. Ci,j = Ai,jxk i³lemi yaplr.

3.1.1.8 operator| :

ki matrisin elemanlarn bit tabanl mantksal veya(or) i³lemini uygulayarak yeni bir matrise yazan fonksiyondur. | Operatoru overload edilmi³tir.

3.1.1.9 operator& :

ki matrisin elemanlarn bit tabanl mantksal ve(and) i³lemini uygulayarak yeni bir matrise yazan fonksiyondur. & Operatoru overload edilmi³tir.

3.1.1.10 matrixMul:

ki matrisin çarpm i³lemi yaplr. Çarpm i³lemi “ekil 3.1' de gösterildi§i gibi yaplmaktadr.

(31)

“ekil 3.1: Matris Çarpm ³lemi

3.1.1.11 log :

Matris elemanlarnn her birinin logaritmasn alarak, bu logaritma de§erler-den olu³an yeni bir matris döndüren fonksiyondur. Logaritma hesaplanrken matristeki her bir elemann mutlak de§eri üzerinden hesaplanr. Logaritmas hesaplanan matris elemannn 0 olmas durumunda büyük bir negatif de§er döndürülmektedir. dst(I) =    log|src(I)|, if src(I) 6= 0 C, di§er durumlarda (3.1)

(32)

3.1.1.12 abs :

Matris elemanlarnn her birinin mutlak de§erini alarak, bu mutlak de§erlerden olu³an yeni bir matris döndüren fonksiyondur.

3.1.1.13 min :

Matris elemanlar arasnda saysal olarak en küçük olan eleman döndüren fonksiyondur.

3.1.1.14 max :

Matris elemanlar arasnda saysal olarak en büyük olan eleman döndüren fonksiyondur.

3.1.1.15 inverse :

Parametre olarak verile bir matrisin tersini alan ve bunu ba³ka bir matrise yazan fonksiyondur.

3.1.1.16 transpose :

Parametre olarak verile bir matrisin transpozunu alan ve bunu ba³ka bir matrise yazan fonksiyondur.

(33)

3.1.1.17 determinant :

Girdi olarak oating point bir kare matris alr ve bunun determinantn döndürür. Determinant hesaplanrken kullanlan fonksiyon 3.3' de gösterilmi³tir. C, A matrisinin kofaktörünü, M ise minörünü ifade etmektedir.

det(A) = n X j=1 Ai,jCi,j = n X j=1

Ai,j(−1)i+jMi,j (3.3)

3.1.1.18 absDi :

Parametre olarak alnan iki matrisin mutlak de§er farkn alan ve yeni olu³an matrisi döndüren fonksiyondur.

3.1.1.19 absDi (skalar) :

Parametre olarak alnan bir matris ve parametre olarak alnan skalar bir de§erin mutlak farkn alan ve olu³an yeni matrisi döndüren fonksiyondur.

3.1.1.20 exp :

Parametre olarak alnan matrisde bulunan her bir elemann sxponentini alan fonksiyondur.

dst(I) = esrc(I) (3.4)

3.1.2 Filtreleme ³lemleri

Filtreleme i³lemleri görüntü üzerinde belirli ayrntlarn ayklanmas, baz ksm-larnn daha belirgin hale getirilmesi veya baz öz-niteliklerin bulunmas amacyla

(34)

yaplan operasyonlardr. Bu operasyonlar ço§unlukla konvolüsyon tabanl i³lem-leri içermektedir.

Filtreleme algoritmalar görüntü i³leme uygulamalarnn temelini olu³turdu§u gibi OpenCL ile paralel hesaplama altyapsn oldukça uygundur. Bellek eri³imlerinin di§er algoritmalara göre daha az olmas ve matematiksel karma³klklar ltreleme algoritmalarn OpenCL ile paralel hesaplama altyapsna oldukça uymaktadr. Bu kazanmlar en üste çkarmak ve OpenCL'in bizlere sundu§u paralel hesap-lama altyapsn daha iyi kullanabilmek için imgeyi bloklar halinde i³lemek ve bu bloklar i³ parçacklarna payla³trmak uygulanm³tr. Her bir i³ parçac§ genel belle§e ula³mak ve gerekti§i durumlarda da piksel verisini yerel belle§e kopyalamakla sorumludur. Bu veri üzerinde uygulanan ltreleme i³lemine uygun matematiksel i³lem yaplmaktadr. Bu grup altnda genellikle konvolüsyon tabanl çe³itli ltreleme algoritmalar implement edilmi³tir. Geli³tirilen bu algoritmalar ve detay bilgileri ³u ³ekildedir;

3.1.2.1 convolveImageWithFilter :

Kullanc tarafndan tanmlanm³ bir ltre ile görüntü üzerinde konvolüsyon i³lemi yapan fonksiyondur. Konvolüsyon i³lemi görüntü üzerinde bir maskenin sol üst kö³eden ba³lanarak, maskenin merkezi her bir piksel üzerinden geçecek ³ekilde bütün resmin taranmas i³lemidir. Bu tarama i³lemi srasnda maske içerisinde kalan her bir piksel maskenin katsaylar ile çarplp bu çarpmlarn toplam, yeni resimde maskenin merkezinin geldi§i konuma yazlr. Bu i³lem a³a§daki “ekil 3.2 de gösterildi§i gibidir. Örnek görüntüdeki de§erler formül 3.5 i³lemine göre yaplr. Bu i³lemin genelle³tirilmi³ gösterimi formül 3.6 'de gösterilmi³tir. Konvolüsyon i³leminde kullanlan matris, içerdi§i de§erlere göre resmi ltreleme, bulankla³trma ve kenar bulma gibi önemli sonuçlar bulunmasn sa§lamaktadr.

(35)

“ekil 3.2: Konvolüsyon Çal³ma Örne§i O5,7 = I5,7K1,1+ I5,8K1,2+ I5,9K1,3+ I6,7K2,1+ I6,8K2,2+ I6,9K2,3 (3.5) O(i, j) = m X k=1 n X l=1 I(i + k − 1, j + l − 1)K(k, l) i = 1...M − m + 1 j = 1...N − n + 1 (3.6) 3.1.2.2 Laplacian:

Laplace ltresi basitçe bir resimdeki kenar hatlarn belirlemek için kullanlr. Burada kenar ile kastedilen objeleri genelde arka plandan ayran keskin renk ayrlklardr. Keskinle³tirme ltresi (Sharpening Filter) ismi ile de anlan laplace ltresi çal³rken çe³itli maskeler kullanr.

(36)

“ekil 3.3: Laplace Uygulanm³ Resim Örne§i

Laplace operatörü, bir görüntünün I(x,y) 2. uzaysal türevinin 2 boyutlu bir izotro-pik ölçümüdür 3.7. Laplace operatörü, bir görüntüde hzl yo§unluk de§i³imlerinin görüldü§ü bölgeyi vurgular ve dolaysyla, genellikle kenar alglama i³lemleri için kullanlr. Laplace algoritmas, genellikle, gürültü hassasiyetini azaltmak için Gauss düzle³tirme ltresine yakn bir operatörle düzgünle³tirilmi³ bir görüntüye uygulanr. Görüntü üzerinde ikinci bir türev ölçümüne kar³lk gelmesi nedeniyle, bu operatörler gürültüye oldukça duyarldr. Bunu önlemek için, Laplace ltresi uygulanmadan önce, görüntüye genellikle Gauss düzle³tirmesi yaplr. Bu ön i³leme adm, farklla³ma admndan önceki yüksek frekansl gürültüyü azaltr. Laplace operatörü, normalde bir gri düzey görüntüyü girdi olarak alr ve ba³ka bir gri düzey görüntüyü çkt olarak verir. “ekil 3.4' deki gibi bir maske kullanlmasyla, Laplace operatörü, standart konvolüsyon yöntemleri kullanlarak hesaplanabilir. L(x, y) = δ 2I δx2 + δ2I δy2 (3.7)

(37)

“ekil 3.4: Laplace Operatör Örnekleri

3.1.2.3 Sobel:

Sobel operatörü, görüntü üzerinde 2 boyutlu uzaysal gradyan ölçümü gerçekle³ti-rir ve böylece, kenarlara kar³lk gelen yo§unluk de§i³imi olan bölgelerini vurgular. Sobel operatörü, genellikle gri tonlamal bir görüntünün her bir noktasndaki yakla³k mutlak gradyan büyüklü§ünü bulmak için kullanlr.

“ekil 3.5: Sobel Uygulanm³ Resim Örne§i

Sobel maskeleri, piksel de§erlerine göre göre dikey ve yatay uzanan kenarlar belirtmek için, bu birbirine dik yönlerin her biri için bir maske uygulanmak üzere tasarlanm³tr. Maskeler, her bir yön üzerinde gradyan bile³eninin ayr ölçümlerini (bunlara Gx ve Gy denebilir) elde etmek için görüntü girdisine ayr ayr uygulanabilir. Daha sonra bunlar, her bir nokta üzerindeki gradyann

(38)

mutlak büyüklü§ünü ve söz konusu gradyann yönünü bulmak için birle³tirilebilir. Gradyan büyüklü§ü ³öyle elde edilir 3.8.

G = pGx2+ Gy2

Θ = arctan(Gx/Gy)

(3.8)

“ekil 3.6: Sobel Operatör Örnekleri

3.1.2.4 Median:

Medyan ltreleme görüntü üzerindeki gürültüyü azaltmak için kullanlan bir ltredir. Gürültülü görüntü üzerindeki her bir pikselin de§eri o piksele kom³u olan di§er piksellere ait de§erlerin medyan de§eri ile de§i³tirilir. Bu sayede gürültüyü yaratan piksel de§eri o kom³ulukta bulunan medyan piksel de§eri ile de§i³tirilmi³ olur. Genellikle 3x3'lük maskeler kullanlrken görüntüdeki gürültü çe³idine göre maske büyüklü§ü ve yaps de§i³tirilebilir. Medyan ltreleme örnek bir görüntü üzerinde uygulanmas “ekil 3.8' de gösterilmi³tir.

(39)

“ekil 3.7: Medyan Uygulanm³ Resim Örne§i

Burada da görülece§i gibi uygulanan ltre her seferinde üzerinde çal³lan pikselin kom³ulu§unda bulunan de§erleri okumaktadr. Bu durum OpenCL yapsna göre dü³ünüldü§ünde her seferinde bellek eri³imi diye dü³ünülebilir. Bu nedenle bu eri³imleri daha hzl yapabilmek için çe³itli optimizasyonlar yaplabilir. Bir sonraki bölümde daha detayl anlatlacak olan bu iyile³tirmelere bu ltre için uygun olan örnek lokal bellek kullanm olacaktr. Bu sayede bellek eri³imleri daha ksa sürede yaplabilecek ve performans kazanm sa§lanacaktr.

(40)

3.1.2.5 Gaussian:

Gaussian ltreleme ayn zamanda bir fourier dönü³ümüdür. Sadece Gauss çan e§risi formu ile Gaussian ltreleme olarak adlandrlmaktadr. Gauss ltre ile sonsuz bir transfer fonksiyonuna kar³lk mekansal alanda sonlu bir pencerede (ta-rama penceresi) ltreleme yaplabilmektedir. Bu da ltrelemenin temel problemini daha kolay çözülebilir hale getirir[7]. Gauss düzle³tirme operatörü, görüntüleri `bulankla³trmak', ayrntlar ve gürültüyü ortadan kaldrmak için kullanlan 2 boyutlu bir konvolüsyon operatörüdür. Bu bakmdan nbox ltresine benzese de, (çan ³eklindeki) Gauss e§risinin ³eklini temsil eden farkl bir maske kullanr. Bu maske, ayrntlar a³a§da verilen baz özelliklere sahiptir. Gauss düzle³tirmesinin arkasnda yatan kir, bu 2 boyutlu da§tm bir nokta da§lmas fonksiyonu olarak kullanmaktr ve bu da konvolüsyonla sa§lanr(Formül 3.9).

Görüntünün bir araya gelmi³ ayrk pikseller olarak depolanmas nedeniyle, konvolüsyon gerçekle³tirmeden önce, Gauss fonksiyonuna ayrk bir yakla³mlama üretmemiz gerekir. Teoride, Gauss da§lm her yerde sfrdan farkldr ve bu durum, sonsuz büyüklükte bir maske gerektirecektir fakat pratikte çe³itli yaknsa-malar mevcuttur. “ekil 3.9 Gauss fonksiyonunu σ = 1.0 ile yakla³mlayan uygun bir tamsay de§erli maske görülmektedir. Gauss fonksiyonuna yakla³mlamann yaplmas için maske de§erlerinin nasl seçilece§i açkça gösterilmemi³tir. Gauss fonksiyonunun de§erinin, maske üzerindeki bir pikselin merkezinde kullanlmas mümkündür fakat Gauss fonksiyonunun de§eri piksel boyunca do§rusal olmayan bir biçimde farkllk gösterdi§inden, bunu yapmak do§ru sonuçlar vermeyecektir. Gauss fonksiyonunun de§erini (Gauss fonksiyonunu 0. 001 artrp toplamak suretiyle) tüm piksel üzerinde tamamladk. Diziyi, kö³elerin de§eri 1 olacak biçimde yeniden boyutlandrdk. ³lemin sonunda, maskedeki tüm de§erlerin toplam 273 çkt ve bu ³ekilde σ = 1.0 de§erli maskeyi üretmi³ olduk.

G(x, y) = 1 2πσ2e

−x2+y2

(41)

“ekil 3.9: Gauss Operatörü(σ = 1.0)

Uygun bir çekirde§in hesaplanmasnn ardndan, standart konvolüsyon yöntemleri kullanlarak Gauss düzle³tirmesi gerçekle³tirilebilir. Yukarda geçen 2 boyutlu izotropik Gauss fonksiyonunun denklemi x ve y bile³enlerine ayr³trlabildi§inden, konvolüsyon oldukça hzl bir biçimde gerçekle³tirilebilir. Böylece, öncelikle x do§rultusunda 1 boyutlu Gauss fonksiyonuyla, daha sonra y do§rultusunda ba³ka bir 1 boyutlu Gauss fonksiyonuyla konvolüsyon uygulayarak, 2 boyutlu konvolüsyon i³lemini gerçekle³tirmek mümkündür. (Gauss operatörü, bu ³ekilde ayr³trlabilen, tamamen dairesel simetrik tek operatördür. ) “ekil 3.10'te, (snr çevresindeki piksellerin de§eri ço§unlukla 0 oldu§undan, buradan bir piksel srasn 273 ile boyutlandrp, yuvarlayarak budadktan sonra) “ekil 3.9'te gösterilen tam çekirde§i elde etmek için kullanlacak 1 boyutlu x bile³eni görülmektedir (Bu i³lem, 7x7 matrisi, yukarda görülen 5x5 matrise dü³ürür. ). y bile³eni tamamen ayn fakat dikey do§rultudadr.

(42)

“ekil 3.10: Gauss Operatörünü Elde Etmek çin Kullanlan x Bile³eni

3.1.2.6 Box ve Normalized Box(nbox):

nbox ltreleme, görüntüleri düzle³tirmenin, yani bir piksel ile bir sonraki ara-sndaki yo§unluk farkn azaltmann basit, sezgisel ve uygulamas kolay bir yöntemidir. Bu yöntem, genellikle görüntülerdeki gürültüyü azaltmak için kul-lanlr. nbox ltrelemenin arkasndaki kir, bir görüntüdeki her bir pikselin de§erini, kendisi de dahil olmak üzere çevresindeki piksellerin ortalama de§eriyle de§i³tirmektir. Bu i³lem, çevresindeki de§erleri yanstmayan piksel de§erlerinin ortadan kaldrlmasna yönelik bir etki do§urur. Sklkla “ekil 3.11'de gösterildi§i gibi 3x3 maskeler kullanlsa da, daha a§r düzle³tirme i³lemleri için daha büyük çekirdekler de (örne§in, 5x5 kareler) kullanlabilir. (Büyük bir maskede tek bir uygulamada elde edilen etkiyle birebir ayn olmasa da benzer bir etki, küçük bir maskenin birden fazla kez uygulanmasyla elde edilebilir.

(43)

3.1.2.7 edgeCanny :

Canny operatörü optimal bir kenar alglayc olarak tasarlanm³tr. Bu operatör, gri tonlamal görüntüleri girdi olarak alr ve izlenen yo§unluk kusurlarn gösteren bir görüntü çkarr.

“ekil 3.12: Canny Uygulanm³ Resim Örne§i

Canny operatörü, çok a³amal bir süreç ile çal³r. Öncelikle, Gauss ltre ile görüntü düzle³tirilir. Daha sonra 2 boyutlu bir ilk türev operatörü, görüntünün ilk uzaysal türevlerinin yüksek oldu§u bölgelerini vurgulamak üzere, düzle³tiril-mi³ görüntüye uygulanr. Kenarlar, gradyan büyüklü§ü görüntüsünde çizgilerin olu³masn sa§lar(Sobel ltreleme). Algoritma, daha sonra bu çizgilerin üzerinden giderek, çkt görüntüsünde ince bir çizgi ortaya çkarmak için, non-maximal sk³trma ad verilen bir i³lemle çizgilerin üzerinde olmayan tüm pikselleri sfr olarak de§i³tirir. zleme i³lemi, iki e³ikle yönetilen bir histerezis ortaya koyar( T1> T2 olmak üzere T1 ve T2 ). zleme i³lemi, ancak çizgi üzerinde T1'den yüksek bir noktada ba³layabilir. zleme, daha sonra bu noktadan çkarak, çizginin yüksekli§i T2'nin altna dü³ene dek her iki do§rultuda da ilerler. Histerezis, gürültülü kenarlarn birden fazla kenar parçasna bölünmemesine yardmc olur. Genel olarak, iyi bir sonuç elde etmek için, üst izleme e³i§i oldukça yüksek, alt

(44)

izleme e³i§i ise oldukça dü³ük olarak ayarlanabilir. Alt e³i§in çok yüksek ayarlan-mas, gürültülü kenarlarda kopmalara yol açar. Üst e³i§in çok dü³ük ayarlanmas ise, görüntü çktsnda görülen yanl³ ve istenmeyen kenar bölünmelerini artrr. Temel Canny operatörüyle ilgili bir sorun, gradyan büyüklü§ü görüntüsünde üç kenarn birle³ti§i Y birle³im noktalaryla ilgilidir. Bu tür birle³im noktalar, bir kenarn ba³ka bir nesne tarafndan ksmen kesildi§i noktalarda gerçekle³ir. zleyici, çizgilerin ikisini tek bir çizgi parças olarak, üçüncü çizgiyi ise bu çizgi parçasna yakla³an ama temas etmeyen bir çizgi olarak de§erlendirilebilir.

“ekil 3.13: Canny Kenar Tanma Algoritma Admlar

3.1.3 Morfolojik Operasyonlar

Morfolojik i³lemler görüntü ltrelemenin bir alt kümesi olarak da adlandrlabilir. Görüntü ltreleme maske aral§ndaki de§erleri çarparak topladktan sonar ilgili piksel de§erini bulurken morfolojik operasyonda gezdirilen maskenin(structuring element) t, hit ve miss gibi sonuçlarna göre ilgili piksel hesaplanr 3.14. Bu gruptaki fonksiyonlar özelikle medikal görüntü i³leme ve robotik görüntü ile ilgili uygulamalarda sklkla kullanlmaktadr.

(45)

“ekil 3.14: Görüntü Üzerinde "cross" Yapsal Eleman ile "Hit" ve "Miss"

3.1.3.1 createStrEl :

Yapsal Eleman: Yapsal eleman olarak isimlendirilen yap, imge üzerinde ya-paca§mz i³leme ve yapmak istedi§imiz uygulamaya göre istenilen boyutlarda ve istenilen ³ekilde hazrlanm³ küçük ikilik bir imgedir. Yapsal eleman farkl geometrik ³ekillerden herhangi biri olabilir. En çok kullanlanlar kare, dikdörtgen ve dairedir .

3.1.3.2 createLineStrEl :

Çizgi ³eklinde yapsal eleman olu³turan fonksiyondur.

3.1.3.3 createRectangleStrEl :

(46)

3.1.3.4 createDiscStrEl :

, Disk ³eklinde yapsal eleman olu³turan fonksiyondur.

3.1.3.5 createDiamondStrEl :

Daire ³eklinde yapsal eleman olu³turan fonksiyondur.

3.1.3.6 createOctagonStrEl :

Oktagon ³eklinde yapsal eleman olu³turan fonksiyondur.

3.1.3.7 createSquareStrEl :

Kare ³eklinde yapsal eleman olu³turan fonksiyondur.

3.1.3.8 erodeImage :

kili imgedeki nesneyi küçültmeye ya da inceltmeye yarayan morfolojik i³lemdir. mge içerisindeki nesneler ufalr, delik varsa geni³ler, ba§l nesneler ayrlma e§ilimi gösterir. “ekil 3.15'de ikili a³nma i³lemi uygulanm³ imgeler gösterilmektedir.

(47)

“ekil 3.15: A³nma Uygulanm³ Resim Örne§i

3.1.3.9 dilateImage:

kili imgedeki nesneyi büyütmeye ya da kalnla³trmaya yarayan morfolojik i³lemdir. Saysal bir imgeyi geni³letmek imgeyi yapsal elemanla kesi³ti§i bölümler kadar büyütmektir. ³lenecek imgenin her bir pikseli, yapsal elemann merkez noktasna oturtularak genle³me i³lemi yaplmaktadr. Kalnla³trma i³leminin nasl yaplaca§n yapsal eleman belirler. Genle³me i³lemi uygulanm³ bir imgede, imge içerisindeki deliklerin ve bo³luklarn doldurulmas ve kö³e noktasnn yumu³amas gözlenir. “ekil 3.16'de ikili genle³me i³lemi uygulanm³ imgeler gösterilmektedir.

(48)

“ekil 3.16: Genle³me Uygulanm³ Resim Örne§i

3.1.3.10 imageApplyOpening :

mge üzerinde a³nma i³leminin hemen ardndan genle³me i³lenmesi uygulanmas sonucu açma i³lemi elde edilir. mge içerisindeki nesneler ve nesneler arasndaki bo³luklar yapsal elemann büyüklü§üne göre temizlenir. mge üzerinde kalan nesneler orijinal imgedeki ³ekillerinden biraz daha küçük hale gelir. Açma i³lemi ile birbirine yakn iki nesne imgede fazla de§i³ime sebebiyet vermeden ayrlm³ olurlar . “ekil 3.17' de açma i³lemi uygulanm³ imge gösterilmektedir.

(49)

“ekil 3.17: Açma Uygulanm³ Resim Örne§i

3.1.3.11 imageApplyClosing :

mge üzerinde genle³me i³leminin hemen ardndan a³nma i³leminin uygulanmas sonucu kapama i³lemi elde edilir. Dolaysyla birbirine yakn iki nesne imgede fazla de§i³iklik yaplmadan birbirine ba§lanm³ olur. “ekil 3.18' de kapama i³lemi uygulanm³ imge gösterilmektedir. Kapama i³lemi sonunda imge içerisindeki nok-talar birbirlerini kapatrlar, imgedeki ana hatlar daha da dolgunla³r. Genle³me i³lemine benzer bir ³ekilde kapama i³leminde de birbirine yakn olan noktalar arasndaki bo³luklar dolar ve noktalar birle³ir. mge üzerinde kalan nesneler, orjinal imgedeki ³ekillerine bürünürler.

(50)

“ekil 3.18: Kapama Uygulanm³ Resim Örne§i

3.1.4 Dönü³üm ³lemleri

Bu bölümde görüntü üzerinde uygulanan dönü³üm fonksiyonlar bulunmaktadr.

3.1.4.1 create2DRotMatrix :

Döndürme için kullanlacak olan 2 boyutlu matrisi olu³turur.

3.1.4.2 getAneTransform :

Alnan 3 referans noktas yardm ile an transformasyon matrisini hesaplayan fonksiyondur.

(51)

3.1.4.3 warpAne:

Birçok görüntüleme sisteminde, alglanan görüntüler, kamera(larn) sahneye göre konumunun, sahnenin geometrisinin görünen boyutlarn de§i³tirdi§i perspektif düzensizliklerinin ortaya çkard§ geometrik bozulmalara maruz kalmaktadr. Tek tip bozulmu³ bir görüntüye an dönü³üm uygulanmas, ölçümleri ideal koor-dinatlardan gerçekte kullanlan koordinatlara dönü³türerek, bir dizi perspektif bozuklu§unu düzeltebilir. (Örne§in bu i³lem, geometrisi do§ru yer haritalarnn elde edilmek istendi§i uydu görüntülemelerinde kullan³l bir yöntemdir. ) An dönü³ümün genel formülü ³u ³ekildedir.

" x2 y2 # = A × " x1 y1 # + B (3.10)

Örnek olarak A ve B'yi matris olarak tanmlarsak; " x2 y2 # = " a11 a12 a21 a22 # × " x1 y1 # + b1 b2 (3.11)

An dönü³ümü, koordinat dönü³ümlerine dayal 3 temel i³lem olan öteleme (translation), döndürme (rotation) ve ölçekleme (scaling) i³lemlerinin genel formudur.

• Öteleme:

Öteleme uyguland§ nesne, eski konumundan belirli uzaklktaki ba³ka bir konuma ta³nmaktadr. Önceki bölümde anlatlan an dönü³üm formülünde A ve B matrislerini öteleme yapmak amacyla tanmlarsak B matrisinin elemanlar olan b1 ve b2 kadar ötelemi³ oluruz.

A = " 1 0 0 1 # , B = " b1 b2 # (3.12) • Döndürme:

Döndürme bir noktann çembersel bir rota üzerinde konum de§i³tirmesidir. Önceki bölümde anlatlan an dönü³üm formülünde A ve B matrislerini

(52)

öteleme yapmak amacyla tanmlarsak A matrisine göre θ kadar döndürmü³ oluruz. A = " cos(θ) −sin(θ) sin(θ) cos(θ) # , B = " 0 0 # (3.13) • Ölçekleme :

Ölçeklendirme dönü³ümü ise görüntünün büyüklü§ünü de§i³tirir. Yani nes-neyi büyütmek veya küçültmek için kullanlabilir. Ölçeklendirme dönü³ümü nesneyi tanmlayan koordinatlarn ölçeklendirme faktörleri ile çarplmas yoluyla gerçekle³tirilir. Önceki bölümde anlatlan an dönü³üm formülünde A ve B matrislerini ölçeklendirme yapmak amacyla tanmlarsak A matrisine göre a11, a22de§erlerine göre ölçeklemi³ oluruz.

A = " a11 0 0 a22 # , B = " 0 0 # (3.14) 3.1.4.4 mirror :

Görüntüyü parametre olarak alnan bir düzlemde aynalayarak bu aynalanm³ görüntüyü döndürür.

3.1.4.5 resizeBilinear:

Bilinear interpolasyon yöntemi ile örneklemede, orijinal görüntüden alnan 4 pikselin a§rlkl ortalamas yeni piksele atanr. Bu yöntemde, düzeltilmi³ görüntü tamamen yeni de§erleri alr.

3.1.4.6 resizeBicubic :

Kübik E§rilik yöntemiyle örneklemede, orijinal görüntüden alnan 16 piksel blo§u-nun a§rlkl ortalamas hesaplanarak düzeltilmi³ görüntü pikseline atanr. Kübik E§rilik yöntemde, Bilinear interpolasyon yönteminde oldu§u gibi yeni piksel

(53)

de§erleri üretilmektedir. Bu iki metodun kullanm ile elde edilen görüntüler, kullancya daha keskin bir görünü³ izlenimi verirler.

3.1.4.7 resizeNearestNeighbour :

En Yakn Kom³uluk yöntemi ile örneklemede, orijinal görüntüden alnan pikseller saysal olarak düzeltilmi³ görüntüdeki en yakn piksele atanr. Bu yöntemde orijinal de§erler en az de§i³ikli§e u§ramakta bununla birlikte, baz piksel de§erleri çift olarak ortaya çkmakta bazlar ise kaybolmaktadr.

3.1.5 Renk Kümesi Dönü³üm ³lemleri

Bu bölümde çe³itli modeller aras renk dönü³ümleri yapmaya yarayan fonksiyonlar bulunmaktadr. Bir renk modelinin asl amac, genellikle kabul gördü§ü biçimde bir takm standartlar ile renk tanmlamalarn kolayla³trmaktr. Saysal görüntü i³lemede RGB, YUV,CMY,CMYK gibi adlandrlan çe³itli modeller bulunmakta-dr. Bu bölümde bu modeller aras dönü³üm için kullanlan ve TRABZ-10 görüntü i³leme kütüphanesinde gerçek³etirilen detaylar algoritmalarn verilecektir. Renk dönü³ümü fonksiyonlar veri ba§mll§ bulundurmayan algoritmik yaplara sahip oldu§u için SIMD yapsna uygundur. Dolaysyla kolayca paralelle³tirilebilir ve performans kazanmlar sa§lanr. Ek olarak baz algoritmalar farkl renk kümeleri üzerinde daha iyi performans verebilmektedirler, bu nedenle renk kümesi dönü³ümüne ihtiyaç duyulur. Bu grupta geli³tirilen fonksiyonlar ³u ³ekildedir.

3.1.5.1 convertRGBtoYUV420 :

Görüntüyü RGB renk uzay formatndan YUV420 formatna dönü³türür. Örnek bir YUV 420 görüntüsü “ekil 3.19' de gösterilmi³tir. Bu dönü³üm formül 3.15' e göre yaplr.

(54)

“ekil 3.19: YUV420 Yaps     Y U V     =     66 129 25 −38 −74 112 112 −94 −18     ×     R G B     Y = (Y + 128) >> 8 U = (U + 128) >> 8 V = (V + 128) >> 8 Y = Y + 16 U = U + 128 V = V + 128 (3.15)

(55)

3.1.5.2 convertRGBtoYUV422 :

Görüntüyü RGB renk uzay formatndan YUV422 formatna dönü³türür. Bu dönü³üm formül 3.15' e göre yaplr.

3.1.5.3 convertRGBtoGRAY :

Görüntüyü RGB renk uzay formatndan gri ölçekli formata dönü³türür. Gri ölçekli format tek bir kanala sahip oldu§u için ilgili kanallar eklenebilir veya çkarlabilir. Bu dönü³üm formül 3.16' e göre yaplr.

x = 0.299R + 0.587G + 0.114B (3.16)

3.1.5.4 convertYUV420toRGB :

Görüntüyü RGB renk uzay formatndan YUV422 formatna dönü³türür. Bu dönü³üm formül 3.17' e göre yaplr.

    R G B     =     1 0 1.28033 1 −0.21482 −0.38059 1 2.12798 0     ×     Y U V     (3.17) 3.1.5.5 convertYUV422toRGB :

Görüntüyü RGB renk uzay formatndan YUV422 formatna dönü³türür. Bu dönü³üm formül 3.17' e göre yaplr.

(56)

3.1.6 Histogram ³lemleri

3.1.6.1 Histogram :

Görüntü i³leme ba§lamnda, bir görüntünün histogram normalde piksel yo§unluk de§erlerinin histogram anlamna gelir. Söz konusu histogram, görüntüde bulunan her farkl yo§unluk de§erindeki piksel saysn gösteren bir graktir. Gri tonlamal 8 bit bir görüntü için 256 farkl yo§unluk olasl§ mevcuttur ve böylece histogram, bu gri tonlamal görüntü de§erlerinin arasnda piksel da§lmn gösteren 256 adet sayy grak üzerinde gösterecektir. Krmz, ye³il ve mavi kanallarnn tekil histogramlarn alarak veya üç eksenden her birinin krmz, mavi ve ye³il kanallara kar³lk geldi§i ve her noktadaki parlakl§n piksel saysn ifade etti§i 3 boyutlu histogram yoluyla, renkli görüntülerin histogramn almak da mümkündür.

3.1.6.2 calculateHistogram :

Girdi olarak alnan görüntünün histogramn döndüren fonksiyondur.

3.1.6.3 histogramEqualization :

Histogram e³itleme bir görüntüyü, yo§unluk histogram istenen ³ekle gelecek biçimde de§i³tirerek, söz konusu görüntünün dinamik aral§ ve kar³tl§n dü-zenlemek için geli³mi³ bir yöntem sunar. Kar³tl§ artrmann aksine, histogram modelleme operatörleri, görüntü girdileri ve çktlar arasndaki piksel yo§unluk de§erlerini birbirine e³lemek için do§rusal olmayan ve tekdüze olmayan aktarm fonksiyonlar kullanabilir. Histogram e³itleme, görüntü girdisindeki piksellerin yo§unluk de§erlerini, görüntü çktsnda tek tip bir yo§unluk da§lm (düz histogram) olacak biçimde yeniden atayan tek tip, do§rusal olmayan bir e³lem kullanr. Bu teknik, (ayrntlarn peki³tirilmesinde etkili oldu§undan) görüntü

(57)

kar³la³trma i³lemlerinde ve örne§in, bir dijitalle³tirici veya görüntüleme sistemi ile ortaya koyulan do§rusal olmayan etkilerin düzeltilmesinde kullanlabilir.

3.1.6.4 histogramThreshold :

Parametre olarak alnan histogramdaki de§erler üzerine e³ik de§eri uygulanr. Bu e³ik üzerindeki de§erler histogramdan silinir.

3.1.6.5 histogramNormalization :

Histogram parametre olarak alnan de§ere yaknla³tran fonksiyondur. Normal-le³tirme i³leme histogram belli bir de§erle çarparak veya bölerek yaplabilir.

3.1.6.6 getMinMaxHistogram :

Histogramdaki en küçük ve en büyük de§erlerin histogram üzerindeki yerlerini döndürür. Birden çok ayn de§er olmas durumunda srasal olarak öncelikli olan döndürmektedir.

(58)

4. GEL“TRME ve YLE“TRME

YÖNTEMLER

4.1 Giri³

Bu bölümde OpenCL kernellarn geli³tirirken uygulad§mz ve genel olarak bir OpenCL uygulamas geli³tirirken yaplan geli³tirme ve iyile³tirme yöntemlerinden bahsedilecektir. Bu yöntemler uygulanrken öncelikli olarak fonksiyonel olarak do§ru çal³an kernellar geli³tirilmi³ ardndan a³a§da belirtilen iyile³tirme yöntem-lerinden, iyile³tirme yaplacak kerneln yapsna ve üzerinde çal³t§mz gömülü platformun mimarisine uygun olanlar gerçekle³tirilmi³tir. Bu bölümde anlatlan iyile³tirme yöntemleri örnek bir OpenCL kernel üzerinden detaylandrlm³tr. Örnek olarak medyan ltre üzerinden detayl açklamalar yaplacaktr. Bölüm 3'de algoritmik yaps anlatlan medyan ltresinin basitçe implement edilmi³ kernel “ekil 4.1' de gösterilmi³tir. Kernel üzerinde görülece§i üzere öncelikle görüntü üzerinde ilgili veriye ula³mak için indeks hesaplanm³, bu indeks de§erinin kenar de§erlerine ula³mamas için gerekli ko³ullar düzenlenmi³tir. Ardndan 8 adet kom³uluk de§eri okunmu³ ve ilgili de§i³kenlere yazlm³ ve bu de§erler üzerinden sralama i³lemi gerçekle³tirilmi³tir. Son olarak ise ilgili de§ere sralanan de§erler tarafndan çkarlan medyan de§eri ilgili indeks ile piksel de§eri olarak yazlm³tr.

(59)

“ekil 4.1: Medyan Filtre OpenCL Kernel

4.1.1 Vektör Operasyonlarn Kullanarak Her ³

Parçac-§na Daha Çok Veri

Vektör veri tiplerini kullanarak i³ parçacklar daha verimli kullanlabilir. Her i³ parçac§ daha çok veri i³leyebilece§inden i³ parçac§ ba³na dü³en i³ miktar artrlm³ olur. char, uchar, short, ushort, int, uint, oat, long, ve ulong vektör veri tipleri OpenCL tarafndan desteklenmektedir. Desteklenen veri büyüklükleri

(60)

ise 2,3,4,8 ve 16'dr. Buna ek olarak vektör veri tipleri double ve half olarak da tanmlanabilmektedir. Bu tanmlamalar device' a ba§l olup device "double" veya "half precision"'  destekliyorsa mümkün olabilmektedir. Vektör veri tiplerini kullanmann getirece§i kazançlar üzerinde çal³lan device'n mimarisine ba§l ka-zanmlardr. Baz mimarilerde vektör veri tiplerini kullanmak "bank conict"'leri azaltabilirkern baz mimarilerde ise "bank conict"'lere neden olabilmektedir. Bunun d³nda vektör veri tiplerini kullanmak genel olarak hesaplama süresini azaltarak kazanmlar getirmektedir.

Önceki bölümde verilen OpenCL kernelnn vektör veri tipleri kullanlarak gerçeklenmesi sonucu yeni kernel “ekil 4.2' deki gibidir. Vektör veri tiplerinin kullanlmas sonucu okuma yazma i³lemleri 128 bit olarak yaplm³ ve her i³ parçac§ birden çok de§er hesaplayarak döndürebilmi³tir. Bunun sonucunda ilk kernela göre %20'lik bir performans kazanm görülmü³tür.

(61)

4.1.2 Yerel(Local) Bellek Kullanm

OpenCL'de yerel bellek, her bir i³lemci üzerinde yer alan bir bellek türüdür ve bu belle§in üzerindeki veriler, yalnzca ayn i³ grubu üzerindeki i³ parçacklar ile payla³lr. Yerel bellek ve yazmaçlar arasnda veri aktarm, genel bellek ve yaz-maçlar arasnda veri aktarmndan daha hzldr. Veriler host üzerinde yazlamaz ve okunamaz. ³lemlerin yalnzca device üzerinde gerçekle³tirilmesine izin verilir. Yerel bellek üzerindeki veriler ancak ayn i³ grubu tarafndan payla³labilir. Genel bellek üzerindeki bir elemana birden fazla eri³meniz gerekti§inde, bu eleman bir kez yerel belle§e kopyalamak ve birden çok kez yerel bellekten eri³mek, bant geni³li§i üzerinde hzlanmanz sa§lar. Bu ko³ullarda, yerel bellek oldukça kullan³ldr.

Önceki bölümde verilen OpenCL kernelnn yerel bellek kullanlarak gerçeklen-mesi sonucu yeni kernel “ekil 4.3' deki gibidir. Bu kernelda ise 8x8 lik bir yerel bellek kullanlm³ olup ilgli piksele ait 9x9 kom³uluk de§erleri bu belle§e kopyalanm³tr. Daha sonra okuma i³lemleri genel bellek yerine, yerel bellek kullanlarak yaplm³tr. Di§er kernellara göre daha karma³k bir indeksleme gerektiren bu kernel sonucunda ilk kernela göre %35'lik bir performans kazanm görülmü³tür.

(62)

“ekil 4.3: Medyan Filtre OpenCL Kernel 3

4.1.3 Dar Bo§az Olu³turan Bölümleri Belirlemek

Belirli mimarilerde, vektör veri tiplerini kullanarak verimlilik elde etmek müm-kündür. Kütüphanede baz algoritmalar vektör veri tiplerini kullanma kabiliyetine büyük ölçüde sahipken, di§erleri bu veri tiplerini kullanamaz. Matris i³lemleri ve ltre fonksiyonlar gibi baz fonksiyonlar, vektör veri tipleri kullanlarak uygulanr. Gömülü platformlarda, vektör d³ veri tiplerinin üzerinde uygulan-d§nda, bu fonksiyonlarda hzlanma elde edilmi³tir. Perspektif dönü³üm gibi di§er baz fonksiyonlar ve dönü³üm an fonksiyonlar, vektör veri tipi kullanma kapasitesine sahip olmad§ndan, bu fonksiyonlar, vektör veri tiplerini kullanarak

(63)

uygulamadk. Bu durumda, vektör veri tiplerinin kullanlmasnn performans nasl etkiledi§i de algoritmaya ba§ldr.

Yerel bellek, genel bellek üzerinde ayn veri unsuruna iki veya daha fazla kez eri³im sa§lamamzn gerekti§i algoritma türleri kar³snda avantaj sa§lar. Bu durum, kütüphane üzerinde bulunan, konvolüsyon tabanl algoritmalar ve matris çarpm gibi baz algoritmalar üzerinde kar³mza çkar. Ancak, gömülü platform üzerinde genel bellek uygulamas kar³snda herhangi bir hzlanma gerçekle³memi³tir.

4.1.4 Genel Yöntemler

OpenCL kernel performansn artrabilmek yaplabilecek i³lemler genel olarak paralel yürütmenin artrlmas, maksimum bellek bant geni³li§ine ula³abilmek için bellek kullanmn minimuma indirmek ve maksimum buyruk çk³n sa§lamak için buyruk kullanmndaki optimizasyonlardr. Bu optimizasyonlardan yola çkarak herhangi bir OpenCL kernel yazarken yaplacak ana i³lemler önem srasna göre ³u ³ekilde gruplandrlabilir.

4.1.4.1 Yüksek Öncelikli:

lk i³ olarak host ve device arasndaki veri transferi minimize edilmelidir. ³-grubu ba³na dü³en i³ parçac§ says warp büyüklü§ünün tam bir kat olmaldr. Bu sayede kaynaklar tam kapasite ile kullanlabilir ve bu da optimum hesaplama verimlili§i kazandr. Bellek kullanmn iyile³tirmek için yani bellek bant geni³li§ini maksimize edebilmek için genel bellek eri³imleri olabildi§ince az olmaldr. Bunun yannda genel bellek kullanm minimize edilmeli ve daha skça eri³ilen bellek transferleri için yerel bellek kullanm maksimize edilmelidir.

(64)

4.1.4.2 Orta Öncelikli:

Yerel belle§e eri³imlerin, y§n çat³mas(bank conict) nedeniyle meydana gelen, taleplerin serile³tirilmesini önleyecek ³ekilde tasarlanmas ve ayn zamanda, yerel belle§in genel bellekten fazlalk aktarmlar önlemek amacyla da kullanlmas gerekir. Yazmaç ba§mllklarndan kaynaklanan gecikmeyi gizlemek için, çoklu i³lemci ba³na yeterli sayda etkin i³ parçac§nn sürdürülmesi gerekir. Daha yava³ ve genel matematik fonksiyonlarnn kar³snda, mümkün oldu§unca daha hzl ve özel matematik fonksiyonlarnn tercih edilmesi ve hzn kesinlikten daha önemli oldu§u durumlarda OpenCL matematik kütüphanesinin kullanlmas gerekir.

4.1.4.3 Dü³ük Öncelikli:

Uzun parametre listeli çekirdekler için, yerel bellekten tasarruf sa§lamak ama-cyla, baz parametrelerin de§i³mez belle§e yerle³tirilmesi daha verimli olabilir. De§i³mez belle§in hzl olmasnn nedeni, önbellekte olmasdr. Kaydrma i³lemleri kullanmak ve döngü sayac olarak i³aretsiz tam saylar yerine i³aretli tam saylar kullanmak verimlilik açsndan daha iyi yakla³mlardr.

4.1.5 Kernel Füzyon

Geli³tirdi§imiz bu kütüphanenin ana kullanm alanlarndan olan ve önemli bir performans kazanm sunmas olas olan bir uygulama alan da gerçek zamanl görüntü i³leme uygulamardr diyebiliriz. Bu tarz uygulamalarda genel olarak bir çok görüntü i³leme ltresi herhangi bir videodaki her bir imgeye sral bir biçimde uygulanmaktadr. Al³lagelmi³ GPGPU uygulamalarnda OpenCL kernellar olarak implement edilmi³ ve sral olarak çal³an bu ltrelerde her bir kernel her seferinde tüm veriyi kopyalayp onun üzerinde i³lem yapmaktadr. Örnek olarak bir imge üzerinde yaplacak olan birden çok ltre için her seferinde giri³ ve çk³ verileri host ve device arasnda transfer edilmektedir. Bunun üstesinden

Şekil

Tablo 2.1: OpenCL Bellek Hiyerar³isi
Tablo 5.1: Test Sistemleri Spesikasyonlar
Tablo 5.2: Vivante GC2000 Bellek Hiyerar³isi

Referanslar

Benzer Belgeler

Kamera ile görüntü işleme sistemi gerçek ortamdan elde edilen görüntülerin incelenmek üzere, görüntünün alınması, bilgisayar ortamına aktarılıp

In this course formula, nomenclature, general physicochemical properties, general synthetic pathways, metabolism, stability, general chemical analysis, structure-activity

Merkür: Gökyüzünde Güneş’ten uzak- laşmaya başlayan gezegen bu ayın ortaları- na kadar gözlem için uygun konumda ola- cak ve akşamları günbatımından sonra batı

Gökçek’in heykelini tekrar ye­ rine koymasının kendisi için onur verici bir durum olduğunu kayde­ den Aksoy, “Ben bu davayı kişisel bir tükürük davası olarak

Paşa anılarında, Gürbüzler Ordusu’nu şöyle anlatıyor: Yoksul ve bakımsız çocukları devlet.. himayesine alarak memleketin diğer çocukları gibi başarılı ve

1. Tepe Püskülü Çıkarma Süresi: ÇıkıĢ ile her parseldeki bitkilerin % 75’inde tepe püskülünün görüldüğü tarih arasındaki gün sayısı

Sözü edilen toplantıda, Azerbaycan’da Rusça ve Azerbaycan Türkçesinin birlikte okutulduğu, her iki dili de öğrenmek isteyen öğrencilerin iki farklı alfabe

sağlığını ve iyi olma halini olumlu etkilediğini, akademik başarısını artırdığını göstermektedir (Yıldırım, 1998: 34). Sosyal destek yalnızlığı azaltan,