tüm gökyüzü kamerasından alınan görüntüler kullanılarak
Transkript
tüm gökyüzü kamerasından alınan görüntüler kullanılarak
TÜM GÖKYÜZÜ KAMERASINDAN ALINAN GÖRÜNTÜLER KULLANILARAK BULUTLULUK ÖLÇÜMÜ YAPILMASI İsmail BAŞLAR UZMANLIK TEZİ TÜRKİYE BİLİMSEL VE TEKNOLOJİK ARAŞTIRMA KURUMU Ulusal Gözlemevi Müdürlüğü Ocak 2012 ANTALYA ÖNSÖZ VE TEŞEKKÜR Çalışma süresince katkı ve desteğinden dolayı Dr. Tuncay Özışık'a teşekkürlerimi sunarım. Ayrıca çalışma arkadaşlarıma ve TUG yönetimine göstermiş olduğu anlayıştan dolayı teşekkürü borç bilirim. i TÜM GÖKYÜZÜ KAMERASINDAN ALINAN GÖRÜNTÜLER KULLANILARAK BULUTLULUK ÖLÇÜMÜ YAPILMASI (Uzmanlık Tezi) İsmail BAŞLAR ÖZET Gökyüzündeki bulutluluğun tespiti, faaliyette olan gözlemevlerinde ve gözlemevi yer seçimi çalışmalarında büyük önem taşımaktadır. Günümüze kadar bulutluluğun tespiti için farklı yöntemler kullanılmıştır. Günümüzde ise kameraların da gelişimiyle, bulutluluk ölçümlerinde tüm gökyüzü kamerası kullanılması önemli yer tutmaktadır. Bu çalışmada TÜBİTAK Ulusal Gözlemevi Bakırlıtepe Yerleşkesi’nde kullanılmakta olan tüm gökyüzü kamerasından alınan görüntüler ile bulutluluk analizi yapan bir sistem üzerinde çalışılmıştır. Amaç, alınan görüntüleri görüntü işleme tekniklerini uygulayarak analiz etmek ve bulutluluk oranını hesaplamaktır. Gündüz ve gece olmak üzere iki farklı zaman dilimindeki görüntüler kendi arasında, bulundukları zaman dilimine göre ayrılarak farklı metotlarla analiz edilmiştir. Görüntülerin tek bir yöntem yerine sınıflara ayrılarak farklı metotlarla incelenmesi halinde başarı oranının yükseldiği görülmüştür. Anahtar Kelimeler: Görüntü işleme, bulutluluk analizi, tüm gökyüzü kamerası, renk uzayı ii CLOUDINESS ANALYSIS BY USING ALL SKY CAMERA IMAGES (Expertise thesis) İsmail BAŞLAR ABSTRACT Cloud detection is an important subject for both observatories already operating and site selection for an observatory. There are some methods used for cloud detection until now. Nowadays cloud detection using all sky cameras is the most promising method by the help of sophisticated cameras. In this work we studied automatic cloudiness analysis system by using the images taken by all sky camera located at TÜBİTAK National Observatory. Different approaches applied to both day time and night time images to calculate the sky coverage. Image classification methods are improved for applying the suitable image processing method. We discovered that classifying images to classes and applying different methods according to their classes increases performance of cloud detection system. Keywords: Image processing, cloudiness, sky coverage analysis, all sky camera iii İÇİNDEKİLER ÖNSÖZ VE TEŞEKKÜR ..................................................................................................... i ÖZET ................................................................................................................................. ii ABSTRACT....................................................................................................................... iii İÇİNDEKİLER ................................................................................................................... iv TABLO LİSTESİ................................................................................................................ vi ŞEKİL LİSTESİ ................................................................................................................ vii SİMGE VE KISALTMALAR ............................................................................................... ix 1. GİRİŞ .............................................................................................................................1 2. ÖLÇME DÜZENEĞİ.......................................................................................................3 3. GÖRÜNTÜ ANALİZ YÖNTEMLERİ ...............................................................................6 3.1. Renk Uzayları .............................................................................................................6 3.1.1. RGB renk uzayı........................................................................................................7 3.1.2. HSV renk uzayı ........................................................................................................8 3.1.3. Lab renk uzayı .........................................................................................................9 3.1.4. CIE XYZ renk uzayı..................................................................................................9 3.2. Dönüşümler ..............................................................................................................10 3.2.1. RGB renk uzayından HSV renk uzayına dönüşüm .................................................10 3.2.2. RGB renk uzayından Lab renk uzayına dönüşüm ..................................................12 3.2.2.1. RGB renk uzayından XYZ renk uzayına dönüşüm ..............................................12 3.2.2.2. XYZ renk uzayından Lab renk uzayına dönüşüm ................................................13 3.3. Çalışma Alanı (maskeleme) ......................................................................................14 3.4. Bağlantılı Bileşen Etiketleme Yöntemi .......................................................................15 3.5 Morfolojik İşlemler ......................................................................................................16 3.5.1. Genleşme işlemi ....................................................................................................17 iv 3.5.2. Aşınma işlemi.........................................................................................................17 3.5.3. Açınım işlemi..........................................................................................................17 3.5.4. Kapanım işlemi ......................................................................................................18 3.5.5. Yapılandırma elemanı ............................................................................................18 3.5.6. Gri seviyede morfolojik işlemler ..............................................................................18 3.6. K-means Yöntemi .....................................................................................................19 3.6.1. K-means yönteminin adımları.................................................................................20 3.7. Otsu Metodu .............................................................................................................21 3.7.1. Varyans..................................................................................................................22 3.7.2. Otsu metodu ve algoritması ...................................................................................22 4. UYGULAMA VE SONUÇLAR ......................................................................................26 4.1. Gündüz Alınan Görüntülerde Bulutluluk Analizi .........................................................26 4.1.1. Güneş'in tespiti.......................................................................................................27 4.1.2. K-means kümeleme yöntemi ile bulutluluk tespiti ...................................................31 4.1.3 RGB uzayı kullanılarak bulut tespiti .........................................................................32 4.1.4. İki yöntemden uygun olanın seçilmesi ....................................................................32 4.2. Gece Alınan Görüntülerde Bulutluluk Analizi .............................................................33 4.2.1. Karanlık gecede bulutluluk analizi ..........................................................................34 4.2.2 Aydınlık gecede bulutluluk analizi............................................................................37 4.2.2.1 Ay'ın tespiti...........................................................................................................37 4.2.2.2. K-means kümeleme yöntemi ile bulutluluk tespiti ................................................38 4.2.2.3. Gece alınan görüntülerde uygun yöntemin seçilmesi ..........................................38 4.3. Bulutluluk Oranı Hesabı ............................................................................................39 5. TARTIŞMA VE ÖNERİLER ..........................................................................................40 KAYNAKLAR ...................................................................................................................44 EKLER .............................................................................................................................47 IDL kodları .......................................................................................................................47 ÖZGEÇMİŞ......................................................................................................................68 v TABLO LİSTESİ Tablo 4.1. Gündüz alınan görüntülerin analizinde kullanılan yöntem seçim tablosu 33 Tablo 4.2. Gece alınan görüntülerin analizinde kullanılan yöntem seçim tablosu 39 vi ŞEKİL LİSTESİ Şekil 2.1. TUG tüm gökyüzü kamera sistemi .....................................................................3 Şekil 2.2. TUG’daki tüm gökyüzü kamera sisteminin bileşenleri ........................................4 Şekil 3.1. Renk uzayları.....................................................................................................7 Şekil 3.2. RGB renk uzayını tanımlayan bir şekil ...............................................................7 Şekil 3.3. HSV renk uzayının konik gösterimi ve silindir biçimli gösterimi...........................8 Şekil 3.4. CIE Lab renk uzayı ............................................................................................9 Şekil 3.5. CIE XYZ renk uzayı .........................................................................................10 Şekil 3.6. Örnek tüm gökyüzü kamerası görüntüsü ve örnek maskeleme görüntüsü .......14 Şekil 3.7. Maskeleme sisteminde kullanılan görüntü........................................................15 Şekil 3.8. Örnek yapılandırma elemanları ........................................................................18 Şekil 3.9. K-means adımları ............................................................................................21 Şekil 3.10. Örnek gri seviye görüntü ve histogramı..........................................................23 Şekil 3.11 Örnek görüntünün arka plan histogramı ..........................................................23 Şekil 3.12. Örnek görüntünün ön plan histogramı ............................................................24 Şekil 3.13. Bölütlenmiş görüntü .......................................................................................25 Şekil 4.1. Örnek tüm gökyüzü kamera görüntüsü ve bu görüntünün piksellerinin HSV uzayında dağılımı .....................................................................................................28 Şekil 4.2. Şekil 4.1'deki görüntünün piksellerinin HSV uzayında dağılımı ........................28 Şekil 4.3. Şekil 4.1’den HSV uzayında Güneş tespit edilen pikseller ...............................29 Şekil 4.4 Şekil 4.3’e aşınma işlemi uygulanarak elde edilen görüntü ...............................29 Şekil 4.5. Şekil 4.4’deki görüntünün en büyük nesnesini gösteren görüntü ......................30 Şekil 4.6. Şekil 4.5’deki nesnenin boşlukları doldurularak elde edilen görüntü .................30 Şekil 4.7. Güneş işaretli görüntü ......................................................................................31 Şekil 4.9. R-B yöntemine örnek görüntü ve bunun bulut işaretli durumu ..........................32 Şekil 4.10 Açık gecede yıldızların etkisi ...........................................................................34 Şekil 4.11. Orijinal görüntü ..............................................................................................35 Şekil 4.12. Şekil 4.11’deki görüntünün R bileşeni ............................................................35 Şekil 4.13. Şekil 4.12’ye açınım işlemi uygulanarak elde edilen görüntü..........................36 vii Şekil 4.14. Şekil 4.11’deki görüntünün bulut işaretli durumu ............................................36 Şekil 4.15. Orijinal görüntü ve bunun Ay tespit edilmiş hali ..............................................37 Şekil 4.16. K-means yöntemine örnek görüntü ................................................................38 Şekil 5.2. Gündüz görüntüleri üzerinde yapılan analiz .....................................................41 Şekil 5.5. Güneş ve ay yansıma engelleyici.....................................................................43 viii SİMGE VE KISALTMALAR Simgeler Açıklama Varyans ω Ağırlık μ Ortalama Kısaltmalar Açıklama ASA American Standards Association CIE Commission Internationale de I’Eclairage CMY Renk Uzayı DSLR Digital single-lens reflex GIF Graphics interchange format HSV Hue Saturation Value (Renk Uzayı) HLS(HSL) Hue Saturation Lightness (Renk Uzayı) JPEG Joined Photographic experts group kb Kilobyte LAB Renk Uzayı LUV Renk Uzayı ix mV Milivolt RGB Red Green Blue (Renk Uzayı) TUG TÜBİTAK Ulusal Gözlemevi USB Universal Serial Bus x 1. GİRİŞ Hava raporu ve uydu görüntüleri, bulunulan bölgenin durumu hakkında düşük çözünürlükte ve genel bir fikir verebilmektedir. Dolayısıyla gözlemevi yerleşkesi gibi bir bölgenin bulutluluk durumu hakkında detaylı bilgi verememektedir. Gökyüzü ısı ölçümünde ise kullanılan algılayıcılar yardımıyla gökyüzü ve yeryüzü ortalama ısıları ölçülerek, bulunan değerlerin kıyaslanması ile bulutluluk tespiti yapılmaktadır. Ashley ve Jurcevic (1991) tarafından yapılan çalışmada bulutların ortamda varlığının, bulutların kızılötesi emisyonundan faydalanılarak belirlenebileceği gösterilmiştir. Bulutlu bölge açık bölgeye göre daha fazla sinyal üretecektir. Bu bilgiler ışığında Clay vd. (1999) kızılötesi algılayıcılar kullanarak bulut bulucu yapmışlardır. Kızılötesi algılayıcı olarak termopil kullanılmıştır. Termopil birkaç termokuplın seri olarak bağlanmasıyla elde edilen algılayıcıdır. Termokupl ise iki farklı metal alaşımın uçlarının birleştirilmesi ile elde edilen bir sıcaklık ölçü elemanıdır. İki uç arasındaki sıcaklık farkına orantılı olarak soğuk nokta uçlarında mV değerlerinde gerilim oluşur. İki uç arasındaki sıcaklık dağılımı nasıl olursa olsun üretilen gerilim sıcak ile soğuk nokta arasındaki sıcaklık farkına orantılıdır (Kartal D, 2006). Termokupl kullanılarak geliştirilen ticari bulut algılayıcıları da bulunmaktadır (Diffraction Limited, 2011). Bu tip sistem gökyüzü hakkında açık, bulutlu, çok bulutlu, yağmurlu gibi bilgiler verebilmektedir. Ancak bulutun konumu ve miktarı hakkında kesin bir bilgi elde edilememektedir. Aynı zamanda ölçüm alanı da tüm gökyüzünü kapsamamaktadır. Diğer bir yöntem ise yüksek çözünürlüklü bir kameraya balıkgözü lens takılarak alınan tüm gökyüzü görüntülerinin analizi ile bulutluluk tespiti yapmaktır. Alınan görüntülerin bölgedeki tüm gökyüzüne ait olması ve görüntü işleme yöntemleri ile bulutların yerinin belirlenebilmesi dolayısıyla bu yöntem çok kullanılmaya başlanan bir yöntem olmuştur. Günümüzde yapılan çalışmalar tüm gökyüzü kamerasından alınan görüntülerin verilerinin daha yüksek doğrulukta analiz edilebilmesine yönelmiştir (Pfister vd., 2003) (Heinle vd., 2010) (Roy vd., 2008). 1 Bu tezin amacı TÜBİTAK Ulusal Gözlemevi'ndeki TUG tüm gökyüzü kamerası ile alınan verilerin analizi ile bulutluluk tespiti yapılmasıdır. Bulutluluk tespiti için günümüzde çeşitli yöntemler kullanılmaktadır. Bunlardan bazıları hava raporu ve uydu görüntüleri, gökyüzü ısı ölçümü ve tüm gökyüzü kamerasından alınan görüntülerin analizi ile elde edilen bulutluluk ölçümüdür. 2 2. ÖLÇME DÜZENEĞİ TÜBİTAK Ulusal Gözlemevi (TUG) Bakırlıtepe Yerleşkesi’ne ait gece/gündüz tüm gökyüzünü gösteren sayısal kamera sistemi aşağıdaki bileşenlerden oluşmaktadır. 1-Küresel pencereli, izoleli, muhafaza kutusu (Şekil 2.1) 2-CANON EOS5D DSLR Kamera (Şekil 2.2) 3-Peleng 8 mm f3.5 Balık Gözü Mercek (Şekil 2.1 ve Şekil 2.2) 4-Pardus 8.0 İşletim Sistemi 5-Gphoto2 Yazılımı 6-Kamera kontrol, arşivleme ve astronomik hesaplar için yazılmış kabuk betikleri. Kamera sistemi TUG Bakırlıtepe Yerleşkesi Merkez Bina çatısında, gökyüzüne bakan yüzünde şeffaf, polyester bir yarıküre bulunan özel bir izolasyonlu kutu içerisinde çalışmaktadır. Kamera için gerekli enerji ve USB veri kablolaması, çatı ile bilgisayar sistem odası arasındaki kablo kanalından sağlanmıştır. Kameranın tüm idaresi buradaki Pardus 8.0 işletim sistemi yüklü bir mini masaüstü bilgisayar ile yapılmaktadır. Şekil 2.1. TUG tüm gökyüzü kamera sistemi 3 Şekil 2.2. TUG’daki tüm gökyüzü kamera sisteminin bileşenleri * Muhafaza kutusu, polyester yarıküre pencere, kamera, bağlantı kabloları Kameraya USB veri yolu üzerinden GPHOTO2 adlı yazılım ile bağlanılmakta ve amaca uygun olarak yazılan eos5d_main, eos_capture adlı iki kabuk betiği ve astronomik hesapların yapıldığı zh_gunes.php kodu tarafından kameranın otomatik olarak 7/24/365 çalışması sağlanmaktadır. Kamera, aşağıda sıralanan özellikler çerçevesinde çalışacak şekilde hazırlanmıştır. 1. Kamera “Manual” modda, balıkgözü mercek ise 3.5 diyafram açıklığında ve sonsuz (∞) odak ayarında çalıştırılmaktadır. 2. Kamera kendi üzerindeki hafıza kartına her 5 dk.’da bir 4368x2912 piksel çözünürlüğünde renkli görüntü almaktadır. 3. Alınan görüntü JPG formatında ve %100 kalitede 502x429 piksel çözünürlüğüne indirilmekte (yaklaşık 35 kb/kare), üzerine yön, tarih ve saat bilgisi yazılarak web sayfasına ve arşive gönderilmektedir. Bu işlemden sonra kameranın hafıza kartındaki görüntü silinmektedir. 4. Kamera Güneş’in gökyüzünde olduğu sürece 100 ASA ve 1/2500 sn. poz süresi ile görüntü almaktadır. Güneş battıktan sonra kararan havaya uyum sağlamak için akşam 4 tanı bitimine kadar poz süreleri her 5 dk.’da bir 3’er adım arttırılarak (1/2500 sn., 1/1250 sn., 1/1000 sn., 1/640 sn.,...) görüntü alınmaktadır. Akşam tanı bitiminde de gece ASA ayarı ve poz süresine (1600 ASA, 30 sn.) geçilmektedir. Sabah tanı başladığında da işlem akşam tanının tersine devam etmektedir (20 sn., 13 sn., 8 sn., …). Güneş doğduğunda da yine gündüz poz süresi ve ASA ayarına geçilmektedir (1/2500 sn., 100 ASA). 5. Çekilen her görüntü aşağıdaki klasör ve isimlendirme yapısında arşivlenir.home/webcam/public_html/archive/kamera1/yyyy_mm/yyyymmdd/tug_asc1_yyy ymmdd_hhmmss.jpg. Arşive giden görüntülerden her gün öğleyin 12:00’de GIF formatında günlük animasyon dosyası oluşturulmakta ve web sayfasında günlük animasyonlar şeklinde yayınlanmaktadır. Bir günlük animasyon dosyası içerisinde o gün öğleyin 12:00'de başlayıp ertesi gün öğleyin 12:00’ye kadar olan 5’er dakika ara ile alınmış görüntüler olmaktadır. Animasyon dosyaları aşağıdaki klasör ve isimlendirme yapısında arşivlenmektedir. /home/webcam/public_html/archive/kamera1/animation/tug_asc1_yyyy-mm-dd-anim.gif Örnek: /home/webcam/public_html/ archive/kamera1/animation/tug_asc1_2010_12_20-anim.gif 5 3. GÖRÜNTÜ ANALİZ YÖNTEMLERİ Yapılan çalışmada bulutluluk analizi gündüz ve gece olmak üzere iki farklı zaman diliminde yapılmıştır. Gündüz ve gece görüntülerinin analizi için farklı yöntemler kullanılmıştır. Gündüz bölümündeki çalışmada renkli görüntü işleme uygulanmıştır. Gece alınan görüntüler ikiye ayrılmış; aydınlık gecelerde, gündüz alınan görüntülerin analizindekine benzer yöntem, karanlık gecelerde ise; gri seviyede eşik değeri belirlenerek bulutluluk tespiti yapılmıştır. İlk önce çalışmada kullanılan yöntemler açıklanacak sonra uygulamaya geçilecektir. 3.1. Renk Uzayları Farklı modellerdeki renk saklama ortamları için bazı donanım standartları vardır. Bu standartların hepsinde bir benek üç boyutlu uzayda bir nokta olarak gösterilir. Çünkü renkmetri biliminin temelini oluşturan Grassmann'ın birinci kanununa göre bir rengi belirlemek için birbirinden bağımsız üç değişkene gerek vardır (Grassman vd. 1996). Bu uzayda eksenler renk (kırmızı, yeşil, mavi gibi), parlaklık, doygunluk ve renk tonu olarak belirlenir. Standart bazı renk uzaylarına örnek olarak RGB, CMY, HSV, HLS, CIE renk uzayları verilebilir. Bunlardan HSV ve HLS renk uzayları silindirik koordinatlarda, RGB, CMY ve CIE renk uzayları ise kartezyen koordinatlarda tanımlıdır. Bazı renk uzayları cihaz bağımlı iken bazıları cihaz bağımsızdır. Cihaz bağımlı renk uzaylarında renkler cihazın özelliklerine bağlı olarak üretildiği için iki farklı cihaz aynı değerleri farklı yorumlayacaktır. Cihaz bağımsız renk uzayları ise CIE tarafından standart gözlemci, standart aydınlatıcı gibi tanımlamalar yapılarak oluşturulmuştur (Smith ve Guild, 1931-1932). Şekil 3.1’de çeşitli renk uzaylarının bazı özeliklerine göre dağılımı gösterilmiştir. 6 Şekil 3.1. Renk uzayları 3.1.1. RGB renk uzayı RGB renk uzayı ismini İngilizcedeki 'Red' 'Green' 'Blue' (yani Kırmızı, Yeşil, Mavi) kelimelerinin baş harflerinden alan bir renk uzayıdır. En sık kullanılan renk uzaylarındandır. Işığı temel alarak, doğadaki tüm renklerin kodları bu üç temel renge referansla belirtilir. Her renk %100 oranında karıştırıldığında beyaz elde edilir. Renk değerlerinin sıfır olduğu durumda ise siyah renk elde edilir. Şekil 3.2'de kırmızı, yeşil ve mavi değerleri sırasıyla 80, 200 ve 130 olacak şekilde örnek bir nokta verilmiştir (RGB Renk uzayı, http://tr.wikipedia.org/wiki/RGB_renk_uzay%C4%B1). Şekil 3.2. RGB renk uzayını tanımlayan bir şekil 7 3.1.2. HSV renk uzayı HSV (Hue, Saturation, Value) veya HSB (Hue, Saturation, Brightness) renk uzayı, renkleri sırasıyla renk özü, doygunluk ve parlaklık olarak tanımlar (HSV renk uzayı,http://tr.wikipedia.org/wiki/HSV_renk_uzay%C4%B1). Renk özü rengin baskın dalga boyunu belirler, örneğin sarı, mavi, yeşil, vb.. Sıfır ile 360 arasında açısal bir değerdir. Bazı uygulamalarda ise 0 ile 100 arasında kullanılır. Doygunluk, rengin canlılığını belirler. Yüksek doygunluk canlı renklere neden olurken, düşük doygunluk rengin gri tonlarına yaklaşmasına neden olur. 0-100 arasında değişir. Parlaklık ise rengin aydınlığını yani içindeki beyaz oranını belirler. 0-100 arasında değişir. HSV renk uzayı Smith (1978) tarafından tanımlanmıştır. Amacı RGB uzayına göre insan görme düzeneğine daha yakın bir yapı oluşturmaktır. HSV, RGB renk uzayından doğrusal olmayan bir dönüşüm ile elde edilir. Her ne kadar HSV ve HSB aynı uzayı tanımlasalar da HSL farklı bir renk uzayıdır. HSV ayrıca aygıt bağımlıdır. Yani bu uzayda tanımlı bir renk, rengi üreten cihaza göre değişim gösterebilir. Aygıttan bağımsız renk gösterimi için CIE Lab veya CIE Luv kullanılmalıdır. Şekil 3.3. HSV renk uzayının konik gösterimi ve silindir biçimli gösterimi 8 HSV uzayı, ilk tanımlandığı zamanlarda konik bir biçime sahipti. Ancak sonraki yıllarda, gerçek zamanlı geçerli koordinat denetimi için zamanın bilgisayarları yeterli olmadığından silindir biçimine dönüştürüldü. Açmak gerekirse, konik biçimde, aydınlık düzeyi azaldıkça koninin genişliği azalır, dolayısıyla, insan görmesine uygun olarak, düşük aydınlıkta algılanabilen farklı doygunluk düzeyleri de azalırlar. Diğer yandan, silindir biçimi ile sıfır aydınlık düzeyinde bile yüksek doygunluk düzeyleri tanımlanabilir ve böylece geçersiz renkler elde edilebilir. Dolayısıyla görüntü işleme uygulamalarında konik biçimi tercih edilirken, renk seçimi görevlerinde silindir biçimi kullanılma eğilimi vardır. 3.1.3. Lab renk uzayı CIE Lab renk uzayı parlaklık (L), kırmızı-yeşil (a) ve sarı-mavi (b) bileşenlerinden oluşmaktadır. Şekil 3.4' de Lab renk uzayı gösterilmiştir. Şekil 3.4. CIE Lab renk uzayı 3.1.4. CIE XYZ renk uzayı İnsan gözünde kırmızı, yeşil ve maviye hassas renk algılayıcı hücreler bulunmaktadır. Bu hücrelerden beyne gelen sinyaller ile ışık şiddetini algılayan diğer hücrelerden gelen sinyaller beyin tarafından birleştirilir ve bu şekilde değişik renk algılamaları oluşur. XYZ 9 renk uzayındaki X, Y, Z değerlerinin, bu 3 değerin toplamına oranı renkleri tanımlar. X değerinin X, Y ve Z toplamına oranı kırmızıyı, Y ve Z nin bu toplama oranları ise sırasıyla mavi ve yeşili temsil eder ve x, y, z olarak gösterilir. X, y ve z değerleri 0 ile 1 arasındadır ve toplamları 1'dir (Wright, 1928). CIE tarafından 1931 yılında standart aydınlatıcı ve standart gözlemci tanımlamaları üzerine kurulan CIE XYZ renk uzayının iki boyutlu gösterimi Şekil 3.5'deki gibidir (Smith ve Guild, 1931-1932). Şekil 3.5. CIE XYZ renk uzayı 3.2. Dönüşümler Çalışılan sistemde değişik renk uzaylarından faydalanıldığı için renk uzayları arasında dönüşümler uygulanmıştır. Bu dönüşümlerin adımları alt bölümler halinde gösterilmiştir. 3.2.1. RGB renk uzayından HSV renk uzayına dönüşüm Ford ve Roberts (1998) tarafından verilen RGB renk uzayından HSV renk uzayına dönüşüm adımları aşağıda verilmiştir: H değeri 0 ile 360 arasında olup S ve V değerleri 0 ve 1 aralığındadır. R, G ve B değerleri 0 ile 1 arasında normalize edilmiştir. 10 HSV değerlerinin hesaplanmasında MAX ve MIN değerleri kullanılır. Bu değerler RGB uzayındaki R,G ve B üçlüsünün en büyük ve en küçük değeridir. H değerini hesaplamak için R', G' ve B' değerleri hesaplanır. = − − 3.1 = − − 3.2 = − − 3.3 Daha sonra H değeri hesaplanır. = 0ise tanımsızdır 3.4 Değilseveeğer = = ise = 5+ 3.5 Değilseveeğer = ≠ ise = 1− ′ 3.6 Değilseveeğer = = ise = +1 3.7 Değilseveeğer = ≠ ise = 3− ′ 3.8 Değilseveeğer = Diğerdurumlarda = 5− ′ = 3+ ′ 3.9 3.10 Bulunan H değeri 60 ile çarpılarak 0 ile 360 arasındaki derece cinsinden değer bulunur. S ve V değerlerinin bulunuşu ise aşağıdaki gibidir. = 0ise = 0 3.11 Diğerdurumlarda = 1 − 3.12 V değeri ise aşağıdaki gibidir: = 3.13 11 3.2.2. RGB renk uzayından Lab renk uzayına dönüşüm RGB renk uzayından Lab renk uzayına doğrudan çevirim iki aşamada yapılmaktadır. 3.2.2.1. RGB renk uzayından XYZ renk uzayına dönüşüm İlk önce R G ve B değerleri 0 ile 1 arasında değer alacak şekilde normalize edilir. Değerler 8 bitlik bir görüntü için 255'e bölünür. = = = 3.14 255 3.15 255 3.16 255 CIE 1931 standartlarında lineer R, G ve B değerlerinden X, Y ve Z değerlerini elde etmek için gereken dönüşüm katsayıları verilmiştir (Smith ve Guild, 1931-1932). Ancak, insan görme sistemine uygun olarak bant genişliğini maksimum verimle kullanmak için görüntülere gama düzeltmesi uygulanmaktadır (Charles, 2003). Lineer olmayan bu dağılımı lineer hale getirmek için aşağıdaki dönüşümler uygulanır. . . varR= ⁄12.92 . varG= > 0.4045 3.17 , değilse . . , eğer ⁄12.92 . VarB= , eğer . . . ⁄12.92 > 0.4045 3.18 , değilse , eğer > 0.4045 3.19 , değilse 12 Lineer değerler elde edildikten sonra CIE standartlarına göre 2 derecelik açıyla görüş ve D65 aydınlatıcısına göre elde edilmiş olan katsayılar kullanılarak X, Y ve Z değerleri elde edilir. 0.4124 = 0.2126 0.0193 0.3576 0.7152 0.1192 0.1805 0.0722 0.9505 3.20 3.2.2.2. XYZ renk uzayından Lab renk uzayına dönüşüm İlk önce CIE standartlarına 2 derecelik görüş ve D65 aydınlatıcısına göre elde edilmiş beyaz nokta değerleri ile X,Y ve Z değerleri normalize edilir. varZ= 3.21 varY= 3.22 varZ= 3.23 Denklem 3.21, 3.22 ve 3.23’de kullanılan referans değerleri sırasıyla 95.047, 100 ve 108.883’dür. Daha sonra L, a b değerleri hesaplanır (Ford ve Roberts, 1998). varX= varY= varZ= ( ( )( ) , eğer > 0.008856 ∗ 7.787) + (16⁄116) , değilse 3.24 ( ( )( ) , eğer > 0.008856 ∗ 7.787) + (16⁄116) , değilse 3.25 ( ( )( ) , eğer > 0.008856 ∗ 7.787) + (16⁄116) , değilse 3.26 13 L=(116 ∗ ) − 16 a=500 ∗ ( − ) 3.28 b=200 ∗ ( − ) 3.29 3.27 3.3. Çalışma Alanı (maskeleme) Tüm gökyüzü kamerasından alınan görüntülerde Şekil 3.7'de görüldüğü üzere görüntünün bir kısmı yeryüzü, ufuk ve kameranın kapattığı bölümden oluşmaktadır. Çalışma alanının alınan görüntünün tamamını kapsamamasından dolayı, her görüntü için Şekil 3.8'deki gibi bir maskeleme sistemi oluşturulmuştur. Karanlık gecede bulutluluk analizinde çalışma alanının küçültülmesi gerektiğinden, maskeleme görüntüsü biraz daha değişik olacaktır. Analiz için yapılan yazılım bu maskeleme dosyasını alarak siyah beyaz bir ikili formata çevirmektedir. Beyaz bölgede kalan koordinatlar indeks olarak alınmış ve görüntü analizi bu bölgede yapılmıştır. Oluşturulan maskeleme dosyası istenildiğinde değiştirilerek çalışma alanının daha esnek olması sağlanmıştır. Şekil 3.6. Örnek tüm gökyüzü kamerası görüntüsü ve örnek maskeleme görüntüsü 14 Şekil 3.7. Maskeleme sisteminde kullanılan görüntü 3.4. Bağlantılı Bileşen Etiketleme Yöntemi İkili seviyedeki bir görüntüde sıfır değerine sahip olan pikseller arka plan, bir değerine sahip olan pikseller ise görüntüdeki nesneler olarak ele alınır. Bu nesnelerin şekillerini, boyutlarını belirlemek için kullanılan yöntemlerden birisi bağlantılı bileşen etiketleme yöntemidir. Bu yöntemde pikseller, komşuluklarına bakılarak taranır ve birbirine bağlantılı olan pikseller aynı numara ile etiketlenir. Bağlantılı bileşen etiketleme yönteminin algoritması aşağıdaki adımlardan oluşmaktadır (Sonka vd., 2008a). Görüntü pikselleri üzerinden soldan sağa ve yukarıdan aşağıya iki defa tarama yapılır. İlk taramada arka plana ait olmayan piksellere 1'den başlayarak etiket numarası verilir. Etiket numarası verilecek pikselin komşulukları kontrol edilir. Eğer komşuluğundaki tüm pikseller arka plana ait ise etiket numarası bir arttırılır. Eğer komşuluğunda sadece bir tek etiket numarasına ait piksel varsa, bu etiket numarası incelenen piksele de verilir. U şeklindeki ya da ters E şeklindeki bileşenlerin bazı piksellerinde komşuluğa bakıldığında birden fazla sayıda etiket numarası görülür. Bu durumda pikseller bu etiket numaralarından birisi ile etiketlenir. Bu etiket numaraları eşit etiket çiftleri olarak başka bir veri yapısında depolanır. İkinci taramada bütün pikseller tekrar taranarak eşit etiket olarak veri yapısında tutulan etiket numaraları, küçük olanın numarasıyla değiştirilir. Böylece bütün komşu pikseller aynı numara ile etiketlenmiş olur. 15 3.5 Morfolojik İşlemler Matematiksel morfoloji teorisi, nonlineer operatörlerle nesne şekilleri üzerinde işlem yapmaya dayanır. Önindirgeme, nesne şekline göre bölütleme, nesne miktarı belirleme gibi birçok uygulamada hızlı ve başarılı çözümler üretebilmektedir (Sonka vd., 2008b). Operatörler görüntü işlemede iki parça veri kümesi ile kullanılırlar. 1- Operatörün uygulanacağı görüntü 2- Yapılandırma elemanı: Görüntüde dolaşan piksel grubudur. Yapılandırma elemanları farklı şekillerde ve büyüklükte olabilmektedir. Bunların bir merkez noktası bulunmakta olup, bu nokta işlenecek resmin her bir pikseli üzerinde gezdirilerek işlem yapılmaktadır. En çok kullanılan morfolojik operatörler şunlardır: 1- Genleşme (Dilation) 2- Aşınma (Erosion) 3- Açınım (Opening) 4- Kapanım (Closing) Matematiksel morfoloji, görüntünün şekilsel yapısına dayanan kümeler teorisi üzerine kurulmuş bir yaklaşımdır. Matematiksel morfoloji teorisinin temelleri ilk olarak Georges Matheron ve Jean Serra tarafından 1980’li yıllarda atılmıştır (Serra vd.,1982, 1988). Bu metodun temelinde iki morfolojik operatör olan aşınma ve genleşme yatmaktadır. Sayısal işaretler için aşınma işlemi, bir Minkowski küme çıkarma işlemi, genleşme işlemi ise Minkowski küme toplama işlemidir. Aşınma işlemi kümeler cebirinde kesişim işlemine, genleşme işlemi ise kümeler cebirinde birleşim işlemine denk düşmektedir. Bu işlemler Serra (1988) tarafından ikili olmayan işaretlere de genişletilmiştir. Temel ikili morfolojik işlemlerin matematiksel tanımlanmaktadır: 16 ifadeleri aşağıdaki denklemlerle X⊕B={pϵZ2 :p=x+b, xϵX, bϵB} XϴB={ pϵZ2 :p+bϵX,ᴠbϵB} genleşme 3.30 aşınma 3.31 XoB=(XϴB)⊕B açınım 3.32 X•B=(X⊕B)ϴB kapanım 3.33 Yukarıdaki denklemlerde X Görüntü, B Yapı elemanı, x X'in elamanı,b B'nin elemanıdır. 3.5.1. Genleşme işlemi Görüntüdeki bir nesneyi büyütmeye ya da kalınlaştırmaya yarayan morfolojik işlemdir. Sayısal bir görüntüyü genişletmek onu yapısal elemanla kesiştiği bölümler kadar büyütmektir. Görüntünün her bir pikseli, yapısal elemanın merkez noktasına oturtularak genleşme işlemi yapılmaktadır. Kalınlaştırma işleminin nasıl yapılacağını yapısal eleman belirler. Genleşme işlemi uygulanan görüntüde, görüntü içerisindeki deliklerin ve boşlukların doldurulması ve köşe noktasının yumuşaması gözlenir (Gonzalez vd., 2003). 3.5.2. Aşınma işlemi Görüntüdeki nesneyi küçültmeye ya da inceltmeye yarayan morfolojik işlemdir. Bu işlem tam olarak olmasa da bir bakıma genleşme işleminin tersi gibi düşünülebilir. Görüntüdeki nesneler ufalır, delik kısım genişler, birbirine bağlı nesneler ayrılma eğilimi gösterir (Gonzalez vd. 2003). 3.5.3. Açınım işlemi Temel olarak aşınma işlemini takip eden genleşme işlemidir. Görüntüdeki nesnenin çevresini yumuşatır ve ince çıkıntıları yok eder. Nesneler orijinal görüntüdeki nesneye göre biraz küçülmüş olur. Görüntü içerisindeki nesneler ve nesne içerisindeki boşluklar yapısal elemanın büyüklüğüne göre temizlenir. Birbirine yakın nesneler birbirinden ayrılmış olur (Karhan vd., 2011). 17 3.5.4. Kapanım işlemi Temel olarak genleşme operatörünü takip eden aşınma operatörüdür. Açınım işlemindeki gibi görüntüdeki nesnenin çevresini yumuşatır ama ince boşlukları doldurarak nesnedeki delikleri kapatır. Nesneler orijinal görüntüdekine göre büyür ve birbirine yakın nesneler bağlanmış olur (Karhan vd., 2011). 3.5.5. Yapılandırma elemanı Yapılandırma elemanı; görüntü üzerinde yapacağımız işleme ve yapmak istediğimiz uygulamaya göre istenilen boyutlarda ve istenilen şekilde hazırlanmış küçük ikili seviyede bir görüntüdür. Yapılandırma elemanı farklı geometrik şekillerden herhangi biri olabilir. En çok kullanılanları kare, dikdörtgen ve dairedir. Şekil 3.8’de yapılandırma elemanına örnekler verilmiştir. Şekil 3.8. Örnek yapılandırma elemanları 3.5.6. Gri seviyede morfolojik işlemler İlk başlarda ikili seviyede kullanılan morfolojik operatörler, minimum ve maksimum işlemleri kullanılarak gri seviyede de uygulanabilmektedir. Aşınma işleminde her piksele komşuluğundaki minimum piksel değeri verilir. Genleşmede ise maksimum piksel değeri verilir. 18 3.6. K-means Yöntemi Mac Queen (1967) tarafından bulunan K-means algoritması, kümeleme problemini çözen en basit denetimsiz öğrenme algoritmalarından biridir. Bölümleyici kümeleme tekniklerinden olan K-means, bilimsel ve endüstriyel uygulamalarda yaygın olarak kullanılmasının yanında görüntü bölütlemede de çok kullanılan kümeleme algoritmaları arasında yer almaktadır. Benzer özellik taşıyan veri elemanlarının kendi aralarında gruplara ayrılması işlemi kümelemedir. K-means algoritmasının genel mantığı, n adet veri nesnesinden oluşan bir veri kümesini (X), giriş parametresi olarak verilen k (k ≤ n) adet kümeye bölmektir. Amaç, gerçekleştirilen bölme işlemi sonunda elde edilen kümelerin; küme içi benzerliklerinin en büyük ve kümeler arası benzerliklerinin en küçük olmasını sağlamaktır. K-means kümeleme yönteminin değerlendirilmesinde nesnelerin bulundukları kümelerin merkez noktalarına uzaklıkları hesaplanır. Bu uzaklığın hesaplanmasında Öklid uzaklığı, Manhattan uzaklığı, Chebyshev uzaklığı gibi farklı formüller kullanılmaktadır. K-means kümeleme yönteminin değerlendirilmesinde en yaygın olarak Öklid uzaklığın karesi kullanılır. Yapılan çalışmada da bu kriter kullanılmıştır. En düşük Öklid uzaklığı karesi değerine sahip kümeleme en iyi sonucu verir. Nesnelerin bulundukları kümelerin merkez noktalarına olan uzaklıklarının karelerinin toplamı Denklem 3.34 ile hesaplanmaktadır (Aloise vd, 2009). Ö ( , ) 3.34 denkleminde k küme sayısı, 3.34 kümenin merkezi, veri kümesi, x ise küme elemanıdır. Bu kriterleme sonucu, k tane kümenin olabildiğince yoğun ve birbirinden ayrı sonuçlanması hedeflenmeye çalışılır. Algoritma, Öklid uzaklığı kareleri toplamını azaltacak k parçayı belirlemeye gayret eder. K-means algoritması, algoritmaya kullanıcı 19 tarafından verilen k parametresi ile n tane veriden oluşan veri setini k adet kümeye böler. Küme benzerliği kümedeki nesnelerin ortalama değeri ile ölçülür, bu da kümenin ağırlık merkezidir (Xu ve Wunsch (2005)). 3.6.1. K-means yönteminin adımları K-means adımları aşağıda açıklanmıştır: a) İlk önce küme merkezleri (kırmızı noktalar) belirlenir. Bunun için iki farklı yöntem kullanılabilir. İlk yöntemde nesneler arasından küme sayısı olan k adet rastgele nokta seçilmesidir. İkinci yöntem ise merkez noktaların tüm nesnelerin ortalaması alınarak belirlenmesidir. b) Test kümesindeki her verinin seçilen merkez noktalara yakınlığı Öklit uzaklığı yöntemiyle hesaplanır. c) Her veri kendine en yakın merkez noktanın olduğu kümeye dahil edilir. d) Oluşan kümelerin merkez noktaları o kümedeki tüm nesnelerin ortalama değerleri ile değiştirilir. e) Kümeleme işlemi yeni merkez noktasına göre tekrar yapılır. Merkez noktalar değişmeyene kadar b, c, d ve e adımları tekrarlanır. Algoritmanın performansını etkileyen kriterler; k küme sayısı, başlangıç olarak seçilen küme merkezlerinin değerleri ve benzerlik ölçümüdür. K-means yönteminin adımları Şekil 3.9'da verilmiştir. CIE Lab renk uzayı RGB renk uzayına göre görsel açıdan daha düzgün değişim gösterdiği için mesafeye bağlı kümeleme algoritmasında işlem sonucu CIE Lab renk uzayında daha başarılı olmaktadır. 20 3.7. Otsu Metodu Gri seviyede bir görüntüyü ikili biçime çevirmek için izlenecek yöntemde, bir eşik değeri belirlenir ve bu eşik değerin üzerindeki renkler beyaza, altındaki renkler siyaha dönüştürülür. Ancak tüm görüntüler için sabit bir eşik değeri kullanılırsa, görüntüler üzerinde kabul edilebilir sonuçlar almak mümkün olmayacaktır. Eşik değerin, resmin renk dağılımına uygun olarak belirlenmesini sağlayacak bir yöntem Otsu (1979) metodudur. Otsu metodu gri seviye görüntüler üzerinde çalışır ve sadece yoğunluk değerlerinin görüntü üzerinde kaçar defa bulunduğuna bakar. Bu yüzden önce görüntünün renk histogramı hesaplanır. Daha sonra yapılan bütün işlemler histogram dizisi üzerinde gerçekleştirilir. Şekil 3.9. K-means adımları *Kırmızı noktalar kümelerin ağırlık merkezini, yeşil ve sarı noktalar ise küme elemanlarını göstermektedir. 21 3.7.1. Varyans Varyans belli bir sayı dizisinin dizinin aritmetik ortalaması etrafındaki dağılımının yorumlanabilmesini sağlayan bir ölçüdür. Varyansın büyük olması, değerlerin dağınık ve kendi ortalamalarından uzak olduklarını, küçük olması ise değerlerin kendi ortalamaları etrafında çok dağılmadıklarını gösterir. Varyans formülü aşağıdaki eşitlikte verilmiştir. = ( − ̅ ) Pr( ) Denklem 3.35’de ̅ 3.35 X kümesinin elemanı, Pr( ) olasılık ağırlıklı ortalama, fonksiyonudur. Görüntü üzerinde bir renk değerinin olasılığı bu değerin resimdeki sayısının, toplam piksel sayısına bölümüdür. 3.7.2. Otsu metodu ve algoritması Otsu metodunda, sınıf içi varyansı minimuma indiren eşik değeri aranmaktadır. Bu değer aşağıdaki gibi hesaplanmaktadır. ( )= Denklem 3.36'da ( ( ) ve )+ ( ) ( ) 3.36 t eşik değeri ile ayrılan sınıfların ağırlık değerleri, oluşan sınıfların varyanslarıdır. Şekil 3.10'da gri seviyede örnek bir görüntü ve histogramı verilmiştir. 22 ve , Şekil 3.10. Örnek gri seviye görüntü ve histogramı Bu görüntü 36 piksellik bir gri seviyede görüntüdür ve yoğunluk değeri 0 ile 5 arasında değişmektedir. Eşik değeri 3 olan bu görüntü için arka plan histogramı Şekil 3.11’de gösterilmiştir. Şekil 3.11 Örnek görüntünün arka plan histogramı Şekil 3.11'deki histogram için ağırlık, ortalama ve varyans değerleri sırasıyla = 8+7+2 = 0.4722 36 3.37 = (0 8) + (1 7) + (2 2) = 0.6471 17 3.38 = ((0 − 0.6471) 17 8) + ((0 − 0.6471) 17 7) + olarak hesaplanır. 23 ((0 − 0.6471) 17 2) = 0.4627 3.39 Şekil 3.12. Örnek görüntünün ön plan histogramı Şekil 3.12'de verilen ön plan histogramı için de aynı değerler hesaplanır. = 6+9+4 = 0.5278 36 3.40 = (3 6) + (4 9) + (5 4) = 3.8947 19 3.41 = ((3 − 3.8947) 19 6) + ((4 − 3.8947) 19 9) + ((5 − 3.8947) 19 4) = 0.5152 3.42 Sınıf içi varyans daha önceden verilmiş olan formülle hesaplandığında aşağıdaki sonuç elde edilir: ( )= ( ) ( )+ ( ) ( ) = 0.4722 0.4637 + 0.5278 0.5152 = 0.4909 3.43 Yukarıda anlatılan işlemler tüm yoğunluk değerleri için hesaplanır ve en küçük sınıf içi varyans değerini veren eşik değeri bölütleme işleminde kullanılır. Örnek görüntünün bulunan eşik değerine göre bölütlenmiş hali Şekil 3.13'deki gibidir. 24 Şekil 3.13. Bölütlenmiş görüntü Sınıf içi varyans değeri minimum iken, sınıflar arası varyans değeri maksimum olur. Sınıflar arası varyansın formülü aşağıda verilmiştir: ( )= − Denklem 3.44'de ( )= ( ) (t)( ( ) − ( )) 3.44 arka plan görüntü için varyans değeri plan ve ön plan görüntü için ortalama değerleri ve ve sırasıyla arka ise sırasıyla arka plan ve ön plan görüntü için ağırlık değerleridir. Denklem 3.44 sınıfların olasılıkları ve ağırlıkları cinsinden sınıflar arası varyans formunu vermiştir. Bu ifade sınıf içi varyansların hesaplanmasına göre daha az işlem gerektirir. Dolayısıyla efektif bir algoritma olarak kullanılabilir. Otsu metodunun uygulanışının algoritması aşağıda verilmiştir. 1. Histogram ve her yoğunluk düzeyi için olasılık hesaplanır. 2. Başlangıç ωi(0) ve μi(0) değerleri hesaplanır. 3. Eşik değeri bir'den başlayarak maksimum yoğunluğa kadar a- ωi ve μi değerleri hesaplanır. b- Sınıflar arası varyans değeri hesaplanır. 4. Maksimum sınıf içi eşik değerini veren eşik değeri aranılan değerdir. Şekil 3.13’de Otsu algoritmasının akış diyagramı verilmiştir. 25 4. UYGULAMA VE SONUÇLAR 4.1. Gündüz Alınan Görüntülerde Bulutluluk Analizi Havanın açık olduğu durumda, Rayleigh dağılımına göre gaz molekülleri tarafından mavi ışık kırmızı ışığa göre daha fazla saçılmaktadır (Chakraborti, 2007). Bu yüzden insan gözü hava açık olduğu zaman gökyüzünü mavi görmektedir. Bulutlar ise mavi ve kırmızının birbirine yakın düzeyde saçılmasını sağlar. Bu durum bulutların gri renkte görünmesine sebep olur (Petty vd., 2006). Bundan dolayı bulut tespiti yaparken mavinin kırmızıya oranı ya da mavi kırmızı değer farkı için eşik değeri belirlenmeye çalışılmıştır (Pfister vd., 2003) (Heinle vd., 2010). Yapılan çalışmada ise k-means kümeleme yöntemi ile görüntü bölütleme işlemi ile bulutlu ve açık gökyüzü ayırt edilmeye çalışılmıştır. Parçalı bulutlu görüntülerde yüksek oranda başarı elde edilmesine karşın, tam bulutlu ya da bazı tam açık görüntülerde istenilen sonuç alınamamıştır. Bu yüzden renk uzayı değerlerinden faydalanılarak görüntüler iki gruba ayrılmıştır. Gündüz görüntülerinin analizinde RGB, HSV, Lab gibi farklı renk uzayları ile çalışılmıştır. 26 Şekil 3.13. Otsu algoritmasının akış diyagramı 4.1.1. Güneş'in tespiti Örnek bir görüntü üzerinde HSV renk dağılımına bakıldığı zaman parlaklık değerinin 200'den büyük ve doygunluk değerinin 10'dan küçük olduğu bölüm Güneş olarak alınmıştır (Roy vd., 2008). Şekil 4.1’deki örnek görüntünün piksellerinin HSV renk uzayındaki dağılımı Şekil 4.2'de gösterilmiştir. Pikseller gökyüzü, bulut, ve güneş pikselleri olarak gösterilmiştir. 27 Belirlenen parlaklık ve doygunluk değerleriyle Güneş tespit edildiğinde görüntüdeki diğer bazı piksellerin de Güneş'e aitmiş gibi algılandığı görülmüştür (Şekil 4.3). Bu pikselleri yok etmek ve aynı zamanda bulunacak güneş piksellerindeki çıkıntıları yok edebilmek için aşınma işlemi uygulanmıştır (Şekil 4. 4). Bu işlemle bütün parçacıklar kaldırılamadığından bağlantılı bileşenler etiketleme yöntemi yardımıyla görüntüdeki en büyük nesne güneş olarak kabul edilmiştir (Şekil 4.5). Son olarak Şekil 4.5'deki nesnedeki boşluğu doldurmak için morfolojik operatörlerden faydalanılarak Şekil 4.6'daki görüntü elde edilmiştir. İkili seviyedeki görüntü kullanılarak orijinal görüntüde Güneş işaretlenmiştir (Şekil 4.7). Şekil 4.1. Örnek tüm gökyüzü kamera görüntüsü ve bu görüntünün piksellerinin HSV uzayında dağılımı Şekil 4.2. Şekil 4.1'deki görüntünün piksellerinin HSV uzayında dağılımı 28 Şekil 4.3. Şekil 4.1’den HSV uzayında Güneş tespit edilen pikseller Şekil 4.4 Şekil 4.3’e aşınma işlemi uygulanarak elde edilen görüntü 29 Şekil 4.5. Şekil 4.4’deki görüntünün en büyük nesnesini gösteren görüntü Şekil 4.6. Şekil 4.5’deki nesnenin boşlukları doldurularak elde edilen görüntü 30 Şekil 4.7. Güneş işaretli görüntü 4.1.2. K-means kümeleme yöntemi ile bulutluluk tespiti K-means yöntemi ile yapılan bulutluluk tespitinde parçalı bulutlu görüntülerde bulutların yüksek oranda doğrulukla tespit edildiği görülmüştür (Şekil 4.8). Görüntünün çalışma alanı içerisindeki piksellerinin Lab uzayındaki a ve b değerleri hesaplanmıştır. Bulunan a ve b değerleri k-means kümeleme işlemi ile ikiye ayrılarak bulutlu ve açık gökyüzü elde edilmiştir. Şekil 4.8. K-means kümeleme yöntemine örnek görüntü 31 4.1.3 RGB uzayı kullanılarak bulut tespiti K-means kümeleme yöntemi rengi iki farklı sınıfa ayırmaya çalışmaktadır. Bu yöntem Lab renk uzayında mavi rengi ayırırken başarılı olmaktadır. Görüntünün karlı ya da bulutlu havalarda tamamen beyaza yakın bir görünümde olmasından dolayı bu tip görüntülerde kmeans kümeleme yöntemi ile istenilen sonuçlar alınamamıştır. Bu tip görüntülerde RGB renk uzayında R değeri ile B değerinin arasındaki fark bir eşik değeri ile ayrılarak bulutluluk tespiti yapılmıştır. Eşik değeri olarak 20 alınmıştır. Aynı şekilde gün batımında da gökyüzündeki mavi rengin değişiminden dolayı k-means yöntemi ile istenilen sonuç alınamamıştır. RGB uzayında daha iyi sonuç elde edilmiştir. Şekil 4.9'da RGB renk uzayında analiz yapılarak bulutluluk tespitine bir örnek verilmiştir. Şekil 4.9. R-B yöntemine örnek görüntü ve bunun bulut işaretli durumu 4.1.4. İki yöntemden uygun olanın seçilmesi Kullanılan iki yöntem farklı durumlarda birbirlerine göre farklı oranlarda başarı göstermiştir. Bu yüzden iki durumu ayırt edecek bir algoritma geliştirilmeye çalışılmıştır. Bu algoritma için de renk uzaylarından faydalanılmıştır. Tam bulutlu ya da çok yüksek oranda bulutlu durumlarda HSV uzayında, çalışma alanındaki piksellerin ortalama doygunluk değerinin, rengin gri tonlara yaklaşmasından dolayı çok küçük çıktığı tespit edilmiştir. Bu yüzden ortalama doygunluk (S) değeri 10.5’in altında olan görüntüler RGB renk uzayı kullanılarak 32 analiz edilmiştir. Gün batımında alınan görüntülerde de RGB renk uzayı kullanıldığında daha başarılı sonuç elde edilmiştir. Bu durum için de LAB renk uzayında, çalışma alanındaki piksellerin ortalama L (parlaklık) değerinin 80’in altında olduğu görüntüler RGB renk uzayı altında analiz edilmiştir. Tablo 4.1 kullanılarak gündüzün farklı zamanlarında değişik bulut yoğunluklarında kullanılacak yöntem seçilmiştir. Tablo 4.1. Gündüz alınan görüntülerin analizinde kullanılan yöntem seçim tablosu KRİTER UYGULAMA Ortalama S değeri < 10.5 RGB renk uzayında eşik değeri kullanımı Ortalama L değeri < 80 RGB renk uzayında eşik değeri kullanımı Diğer durumlar K-means Yöntemi 4.2. Gece Alınan Görüntülerde Bulutluluk Analizi Gece alınan görüntülerin analizinde de iki yöntem denenmiştir. Birincisi gri seviyede analiz, diğeri ise k-means yöntemi ile analizdir. Ay'ın konumu ve parlaklığı, gri seviyede çalışıldığında görüntüye gri seviyede etki edebileceği için analizi çok fazla etkilemektedir. Ay'ın ortamı belirli bir seviyeden fazla aydınlattığı durumda “k-means” kümeleme yöntemi kullanılmıştır. Gri seviyede çalışırken batı tarafından şehir ışıklarının etkisi ve Ay'ın konumuna göre batı ve doğudan gelen ışık görüntünün sağ ve sol taraflarını aydınlatmaktadır. Bu etkiyi minimuma indirebilmek için maskeleme görüntüsü değiştirilerek çalışma alanı biraz küçültülmüştür. Gri seviyedeki görüntüden bulutluluk analizi yapılırken ilk önce görüntü tam açık ya da kapalı olarak ikiye ayrılmaya çalışılmıştır. Bu ayrımı yapmak için gri seviyeden ikili seviyeye geçiş işlemi yapılarak görüntüde oluşan ayrışık küçük nesnelerin sayısına bakılmıştır. Bu sayının 40'dan küçük olması durumunda görüntü tam kapalı gökyüzü, 100'ün üzerinde olması durumunda ise tam açık gökyüzü olarak değerlendirilmiştir. Diğer durumda ise bulutlu kısım tespit edilmeye çalışılmıştır. Bu işlemi yapmak için eşik değeri belirlenmesi gerekmektedir. Ortamdaki yıldızlar bu eşik değerinin belirlenmesine etki edeceği için ilk önce yıldızlar görüntüden kaldırılmaya çalışılmıştır ve bunun için morfolojik operatörlerden faydalanılmıştır. Bu iş için açınım operatörü kullanılmıştır. Daha sonra otomatik eşik 33 değeri belirlemek için Otsu metodu kullanılarak eşik değeri belirlenmiş ve ikili seviyedeki görüntü elde edilmiştir. 4.2.1. Karanlık gecede bulutluluk analizi Karanlık gecede ortam yeterince aydınlanmadığından renklerden faydalanılamamaktadır. Bu yüzden bulutluluk analizi görüntünün gri seviyedeki değerleri kullanılarak yapılmıştır. İlk önce görüntü tam açık gökyüzü ya da tam kapalı olarak ayrılmaya çalışılmıştır. Bunun için görüntünün RGB uzayındaki kırmızı bileşeni alınmıştır. Kırmızı bileşen daha sonra Otsu metodu ile ikili seviyeye çevrilmiştir (Şekil 4.10). İkili seviyedeki bu görüntüde bağlantılı bileşenler analizi uygulanmış ve toplam piksel sayısı 4 ile 12 arasındaki nesnelerin sayısı bulunmuştur. Bu sayı 40 dan küçük ise görüntü tam kapalı gökyüzü, 100 den büyük ise görüntü tam açık gökyüzü olarak değerlendirilmiştir. Diğer durumda ise görüntü üzerinde bulut belirlenmeye çalışılmıştır. Şekil 4.10 Açık gecede yıldızların etkisi Tam açık ya da tam kapalı gökyüzü olarak değerlendirilmeyen görüntülerde ilk olarak orijinal görüntünün R bileşeni alınmıştır. Şekil 4.11 ve 4.12'de sırasıyla orijinal görüntü ve görüntünün R bileşeni görülmektedir. 34 Şekil 4.11. Orijinal görüntü Şekil 4.12. Şekil 4.11’deki görüntünün R bileşeni R bileşeni üzerinde Otsu metodu ile bulutları tespit edebilmek için açınım işlemi yapılmıştır. (Şekil 4.13). Yani önce aşınma sonra genleşme işlemi yapılır. Her ne kadar görüntü orijinal halini kaybetse de orijinal görüntüye yakın bir şekilde bir sonraki adımı etkileyecek yıldız etkisi yok edilmeye çalışılmıştır. Şekil 4.13 üzerinde Otsu metodu uygulanarak bulutlu ve açık bölge şeklinde görüntü ikiye ayrılmıştır. İşaretlenen bulutlar Şekil 4.14'de görülmektedir. Karanlık gecede yapılan analizlerde batıdaki şehir ışıkları ve doğuda ve batıda oluşabilecek Ay ışığı eşik belirleme işlemini çok etkileyeceğinden maskeleme görüntüsü doğu ve batı tarafını daraltacak şekilde ayarlanmıştır. 35 Şekil 4.13. Şekil 4.12’ye açınım işlemi uygulanarak elde edilen görüntü Şekil 4.14. Şekil 4.11’deki görüntünün bulut işaretli durumu 36 4.2.2 Aydınlık gecede bulutluluk analizi 4.2.2.1 Ay'ın tespiti Yapılan çalışmada Ay’ın gökyüzündeki yeri tespit edilmiştir. Bunun için RGB renk uzayında B değerlerinin 200'den büyük olduğu değerler Ay olarak işaretlenmiştir. Güneş'in tespitinde olduğu gibi Ay tespitinde de morfolojik operatörlerden faydalanılmıştır. Verilen örnekte B bileşeni ile belirlenen parça, tek parça halinde ve içerisinde boşluklar olmayacak şekilde çıktığından morfolojik operatörlerle yapılan işlem Ay tespitini değiştirmemiştir (Şekil 4.15). Bu yüzden bu adımlar gösterilmemiştir. Ay’ın ortamı çok fazla aydınlattığı durumlarda B değerlerinin 200'den büyük olduğu değerler ekranın büyük bir kısmını kapsadığından dolayı B değerinin 250'den büyük olduğu değerler Ay olarak hesaplanmıştır. Bunun için de görüntünün piksellerinin Lab uzayında ortalama L değeri alınmış ve bu değerin 150'den büyük olduğu durumlarda eşik değeri 250 olarak belirlenmiştir. Şekil 4.15. Orijinal görüntü ve bunun Ay tespit edilmiş hali 37 4.2.2.2. K-means kümeleme yöntemi ile bulutluluk tespiti Ay'ın ortamı çok aydınlattığı gecelerde alınan görüntülerin analizinde k-means yöntemi kullanıldığında iyi sonuç alınmıştır. Şekil 4.16'da örnek bir görüntü ve k-means ile belirlenen bulutlar görülmektedir. Şekil 4.16. K-means yöntemine örnek görüntü 4.2.2.3. Gece alınan görüntülerde uygun yöntemin seçilmesi Gece alınan görüntülerde, görüntü ilk önce aydınlık ve karanlık olarak ikiye ayrılmıştır. Karanlık görüntülerde gri seviyede analiz, aydınlık görüntülerde ise renkli uzayda analiz yapılmıştır. İki farklı analiz yönteminden hangisinin kullanılacağını belirlemek için HSV uzayında çalışma alanının ortalama V değerine bakılmıştır. Karanlık gecelerde görüntü ilk önce tam kapalı gökyüzü ve tam açık gökyüzü olarak ayrılmaya çalışılmıştır. Bunun için görüntüdeki yıldızların etkisiyle oluşacak küçük nesnelerin sayısına bakılmıştır. Tam kapalı ya da tam açık gökyüzü görüntüsü olarak belirlenemeyen görüntülerde Otsu metodu kullanılarak bulutlu bölge belirlenmeye çalışılmıştır. Tablo 4.2'de uygulanan kriter ve yöntem gösterilmiştir. 38 Tablo 4.2. Gece alınan görüntülerin analizinde kullanılan yöntem seçim tablosu KRİTER YÖNTEM Küçük parçacık sayısı > 40 ve küçük parçacık sayısı < 100 ve Gri seviyede analiz Ortalama V değeri <= 11 Ortalama V değeri > 11 K-means yöntemi 4.3. Bulutluluk Oranı Hesabı Bulutluluk oranı çalışılan görüntüde bulut tespit edilmiş piksel sayısının, görüntünün çalışma alanındaki toplam piksel sayısından Güneş ya da Ay olarak tespit edilen piksel sayısının çıkartılması ile elde edilen sayıya oranı olarak hesaplanmıştır. − ü 4.1 ş Denklem 3.45'de bulut, toplam bulutlu piksel sayısı, toplam, çalışma alanındaki toplam piksel sayısı, güneşyadaAy ise Gündüz Güneş gece ise Ay olarak tespit edilen piksel sayısıdır. 39 5. TARTIŞMA VE ÖNERİLER Bu çalışmada TUG'da kullanılmakta olan tüm gökyüzü kamera sisteminin görüntüleri kullanılarak bulutluluk analizi yapılması üzerine çalışılmıştır. Kamera sisteminin hava şartları dolayısıyla buğulanması, kırmızılaşması gibi durumlar ve kamera üzerindeki kar ve yağmur etkileri çalışma dışında tutulmuştur. Önceki bölümlerde anlatılan yöntemleri kullanan bir yazılım yapılmıştır. Bu yazılım TUG'da lisanslı olarak kullanılmakta olan IDL ile geliştirilmiştir. Yazılım kodları Ekler bölümünde verilmiştir. Bu yazılımla yapılan analizlerle ilgili örnekler Şekil 5.1, 5.2, 5.3 ve 5.4'de görülmektedir. Şekil 5.1 ve Şekil 5.2 gündüz görüntüleri üzerinde yapılan analizlere, Şekil 5.3 ve Şekil 5.4 ise gece görüntüleri üzerinde yapılan analizlere örnek olarak verilmiştir. Şekillerde görüntüler soldan sağa orijinal görüntü ve bulut işaretli görüntü olacak şekilde dizilmiştir. Bulut işaretli görüntülerde kırmızı renk Ay ya da Güneş, siyah renk k-means yöntemi ile tespit edilen bulut, beyaz ise karanlık gecede analizle ya da R-B yöntemi ile tespit edilen bulutu göstermektedir. Görüntü hiç değişmemişse tam açık, tamamen beyazla kaplı ise tam kapalı olarak sınıflandırılmıştır. Gündüz yapılan analizlerde Güneş’in çevresinde bulut olarak algılanmaktadır. Tam açık gökyüzü olan görüntülerde öğlen vaktinde Güneşin bu etkisi çok belli olmaktadır. Şekil 5.1’de en alt sıradaki görüntüler buna örnektir. Gün batımına doğru alınan bazı görüntülerde de açık gökyüzü, bulut gibi algılanmıştır. R-B yöntemi hem tam kapalı gökyüzüne ait hem de gün batımına yaklaşılan zamana ait olan görüntüler için uygulanmıştır. İki ayrı durum için ayrı eşik değerleri alınmasının sistemin performansını arttıracağı düşünülmektedir. Şekil 5.2'deki ilk görüntü bu duruma bir örnektir. Gece görüntüleri için yapılan analizde, Ay'ın etkisinin Güneş etkisine benzer olduğu söylenebilir. Şekil 5.4' deki ilk görüntü buna bir örnektir. 40 Şekil 5.1. Gündüz görüntüleri üzerinde yapılan analiz *Önce orijinal görüntü, hemen yanında bulut işaretlenmiş görüntü verilmiştir. Şekil 5.2. Gündüz görüntüleri üzerinde yapılan analiz *Önce orijinal görüntü, hemen yanında bulut işaretlenmiş görüntü verilmiştir. 41 Şekil 5.3. Gece görüntüleri üzerinde yapılan analiz *Önce orijinal görüntü, hemen yanında bulut işaretlenmiş görüntü verilmiştir Şekil 5.4. Gece görüntüleri üzerinde yapılan analiz *Önce orijinal görüntü, hemen yanında bulut işaretlenmiş görüntü verilmiştir Çalışmada gündüz ve gece bulutluluk tespiti için değişik yöntemler denenmiştir. K-means kümeleme yöntemi ile parçalı bulutlu görüntülerle iyi sonuçlar alındığı görülmüştür. RGB renk uzayında ise çok bulutlu ve gün batımındaki görüntülerde daha iyi sonuç alınmıştır. Farklı yöntemleri birleştirerek bulut tespit başarısının daha yükseltilebileceği görülmüştür. HSV ve LAB renk uzaylarından faydalanılarak uygulanacak yöntemlere göre görüntüler ayrılmaya çalışılmıştır. Renk uzaylarının bir değerini kullanmak yerine daha fazla 42 değişkenle ve veriyle modelleme yapmak yöntem seçim algoritmasını güçlendirecektir. Güneş'in ve Ay'ın görüntüde belirlenmesindeki görüntü işlem uygulamalarında sıkıntılar görülmüştür. Görüntünün üzerinde Güneş ve Ay çevresindeki yansımalar ve parlamalar tespiti zorlaştırmaktadır. Literatürdeki bazı tüm gökyüzü kamerası çalışmalarında Şekil 5.5'deki gibi bu etkileri azaltıcı önlemler alınmıştır (Linfoot vd, 2008). Şekil 5.5. Güneş ve ay yansıma engelleyici Çalışmanın sonraki aşamasında astronomi verilerinden faydalanarak uygulamada kullanılan algoritmaların güçlendirilmesi düşünülmektedir. Güneş'in ve Ay'ın görüntü üzerinde olması gereken yerin belirlenmesi, yansıma ve parlama gibi gürültülerin anlaşılmasını ve yok edilmesini kolaylaştıracaktır. Aynı zamanda karanlık gece ve aydınlık gecenin belirlenmesi için çalışmada kullanılan algoritmalarıda güçlendirecektir. Aynı zamanda gece ve gündüz görüntülerinin ayırt edilerek gece ve gündüz analizinin birleştirilip tam otomatik bir sistem oluşturulması mümkün olacaktır. 43 KAYNAKLAR ALOISE, D., Deshpande, A., Hansen, P., Popat,P., NP-hardness of Euclidean sum of squares clustering, Machine Learning, 75, p:245-49, (2009) ASHLEY, M.C.B., Jurcevic J.S., A Cloud detector for automated telescopes, Publication of Astronomical Society of Australia, PASA 9(2), (1991) CHAKRABORTI, S., Verification of Rayleight Scattering Cros Section, American Journal of Physics, Vol:75, 9, p:824-26, (2007) CHARLES, P., Digital Video and HDTV: Algorithms and Interfaces. Morgan Kaufmann, San Francisco, (2003), p:260. CLAY, R.W., Pace, R.T., Riordan, D. S., Smth, A. G. K. & Wild N. R., Cloud monitoring for large cosmic ray sites, Proceedings of the 26th International Cosmic Ray Conference., (IUPAP). Vol:5, Salt Lake City, Utah, p:421, (1999) FORD, A., Roberts, A., Colour Space Conversions. Westminster University, London , (1998), http://www.poynton.com/PDFs/coloureq.pdf [erişim 30.11.2011]. Difraction limited, The boltwood cloud sensor http://www.cyanogen.com/cloud_main.php [erişim 01.12.2011] GONZALEZ, C.R., Woods, E.R., Eddins, S.L., Digital Image Processing Using MATLAB, (2003), p:337-45. GRASSMANN, H., Schubring G., Hermann Günther Grassmann (1809-1877): visionary mathematician, scientist and neohumanist scholar : papers from a sesquicentennial conference, Springer, (1996) p:78. HEINLE, A., Macke, A. and Srivastav, A., Automatic cloud classification of whole sky images, Atmos.Meas.Tech.,3, p:557–67, (2010) HSV renk uzayı, http://tr.wikipedia.org/wiki/HSV_renk_uzay%C4%B1 [erişim 28.09.2011] 44 KARHAN, M., Oktay O., Karhan Z., Demir H., Morfolojik Görüntü İşleme Yöntemleri ile Kaysılarda Yaprak Delen (Çil) Hastalığı Sonucu Oluşan Lekelerin Tespiti, 6th International Advanced Technologies Symposium(IATS' 11), Elazığ, (2011) KARTAL, D., Kuantum Kuyulu Kızılötesi Fotodedektörler, Yüksek Lisans Tezi, Cumhuriyet Üniversitesi, Sivas, (2006) LINFOOT, A., Alliss, R., A Cloud Detection Algorithm Applied to A Whole Sky Imager Instrument Using Neural Networks, (2008), http://ai.metr.ou.edu/ams2008/129536.pdf, [erişim 30.11.2011] MACQUEEN, J. B., Some Methods for Classification and Analysis of Multivariate Observations, Proceedings of 5-th Berkeley Symposium on Mathematical Statistics and Probability, University of California Press, Berkeley, p:281-97, (1967). OTSU, N., A Threshold Selection Method from Gray-Level Histograms, IEEE Transactions on Systems, Man, and Cybernetics, Vol. 9, No. 1, p:62-6, (1979). PETTY, G. W. ,A first course in atmospheric radiation, Sundog Publishing, Madison, Wisconsin (2006). PFISTER, G., McKenzie, R. L., Liley, J. B., Thomas, A., Forgan,B. W., and Long, C. N. Cloud coverage based on all-sky imaging and its impact on surface solar irradiance, J. Appl. Meteorol.,42, 1421–34, (2003). RGB Renk uzayı, http://tr.wikipedia.org/wiki/RGB_renk_uzay%C4%B1 [erişim 28.09.2011] ROY, G., Hayman S., Julian W., Sky Modelling from Digital http://www.cadplan.com.au/Reports/dsmreport.pdf, University of Sydney University, (2008) [erişim 30.11.2011] Imagery, Murdoch SERRA, J., Image Analysis and Mathematical Morphology, Vol:1, Academic, London, (1982) SERRA, J., Image Analysis and Mathematical Morpholoji , Vol:2, Academic Press, London, (1988) 45 SMITH, T., Guild, J . The C.I.E. colorimetric standards and their use. Transactions of the Optical Society, 33, p:73–134, (1931–32). SMITH, A.R., Color gamut transform pairs, Computer graphics, 12, (1978), p:12-9 SONKA, M., Hlavac, V., Boyle, R., Image Processing, Analysis, and Machine Vision, Thomson, (2008a), p:332-3 SONKA, M., Hlavac, V., Boyle, R., Image Processing, Analysis, and Machine Vision, Thomson, (2008b), p:657 XU, R., Wunsch, II. D., Survey of Clustering Algorithms, IEEE Transactions On Neural Networks, 16, 3, (2005). WRIGHT, W.D., A re-determination of the trichromatic coefficients of the spectral colours. Transactions of the Optical Society, 30, (1928), p:141-64. 46 EKLER IDL kodları Oluşturulan yazılımda, değişik algoritmaların gece ve gündüz için sürekli değiştirilerek test edilebilinmesi için kodlar gece ve gündüz için ayrı fonksiyonlara bölünmüştür. function cloud_cluster,day_photo; ;Gündüz alınan görüntülerde k-means yöntemi maskimage=calculate_mask() in_bound=where(maskimage gt 50) out_bound=where(maskimage le 50) mask2=maskimage mask2(out_bound)=2 day_photo_for_sun=day_photo sky_photo_size=size(day_photo) image_size=size(day_photo) day_photo_xyz=fltarr(3,image_size(2),image_size(3)) day_photo_lab=fltarr(3,image_size(2),image_size(3)) for i=0,image_size(2)-1 do begin for k=0,image_size(3)-1 do begin xyz=rgb_to_xyz(float(day_photo(0,i,k)),float(day_photo(1,i,k)),float(day_photo(2,i,k))) lab=xyz_to_lab(float(xyz(0)),float(xyz(1)),float(xyz(2))) day_photo_xyz(0,i,k)=xyz(0) day_photo_xyz(1,i,k)=xyz(1) day_photo_xyz(2,i,k)=xyz(2) day_photo_lab(0,i,k)=(lab(0)/100)*256 day_photo_lab(1,i,k)=lab(1)+127 day_photo_lab(2,i,k)=lab(2)+127 47 endfor endfor ab=fltarr(2,sky_photo_size(2),sky_photo_size(3)); ab[0,*,*]=REFORM(day_photo_lab[1, *, *]) ab[1,*,*]=REFORM(day_photo_lab[2, *, *]) ab_two_dimen=REFORM(ab,2,sky_photo_size(5)/sky_photo_size(0)) ab_two_dimen2=ab_two_dimen(*,in_bound) openw,33,'idlicin2.txt' printf,33,ab_two_dimen2 close,33 spawn,'java -jar kmeans.jar',Weights Weights=reform(Weights,2,2) k=2 ;Weights = CLUST_WTS(ab_two_dimen2, N_CLUSTERS = k, N_ITERATIONS = 40) Kmean kümeleme işlemi idlde çalıştırılamadı.Bu kısım java ile yapıldı. CenterInd = CLUSTER (ab_two_dimen2, Weights, N_CLUSTERS = 2) Center = TRANSPOSE(Weights) size_in_bound=size(in_bound) for l=0L,size_in_bound(1)-1 do begin mask2(in_bound(l))=CenterInd(l) endfor Center=float(Center) centertot=total(Center,2) meanall=centertot/2 mean1=meanall(0) mean2=meanall(1) if mean2 gt mean1 then begin cloudind=where(mask2 eq 1) endif else begin cloudind=where(mask2 eq 0) 48 endelse redchannel=REFORM(day_photo[0, *, *]) greenchannel=REFORM(day_photo[1, *, *]) bluechannel=REFORM(day_photo[2, *, *]) redchannel=reform(redchannel,1,sky_photo_size(5)/sky_photo_size(0)) greenchannel=reform(greenchannel,1,sky_photo_size(5)/sky_photo_size(0)) bluechannel=reform(bluechannel,1,sky_photo_size(5)/sky_photo_size(0)) redchannel(cloudind)=0 greenchannel(cloudind)=0 bluechannel(cloudind)=0 day_photo2=bytarr(3,sky_photo_size(2),sky_photo_size(3)); day_photo2[0,*,*]=reform(redchannel,sky_photo_size(2),sky_photo_size(3)) day_photo2[1,*,*]=reform(greenchannel,sky_photo_size(2),sky_photo_size(3)) day_photo2[2,*,*]=reform(bluechannel,sky_photo_size(2),sky_photo_size(3)) day_photo3=find_sun(day_photo_for_sun,day_photo2) return,day_photo3 end function r_minus_b,allskyimage ;Gündüz alınan görüntülerde r_minus_b yönteminin uygulanması READ_JPEG, 'C:\mask2\mask.jpg', maskimage masksize=size(maskimage) in_bound=where(maskimage gt 50) out_bound=where(maskimage le 50) out_bound=where(maskimage le 50) maskimage(in_bound)=1 maskimage(out_bound)=0 allskyimagerminusb=allskyimage redChannel = REFORM(allskyimage[0, *, *]) 49 greenChannel = REFORM(allskyimage[1, *, *]) blueChannel = REFORM(allskyimage[2, *, *]) imageSize=size(allskyimage) for i=0,imageSize[2]-1 do begin for y=0,imageSize[3]-1 do begin if blueChannel(i,y) lt redChannel(i,y) then begin dev1=redChannel(i,y) - blueChannel(i,y) endif else begin dev1=blueChannel(i,y)-redChannel(i,y) endelse deviation=dev1 if maskimage(i,y) eq 1 then begin if deviation lt 20 then begin allskyimagerminusb(*,i,y)=255 endif endif endfor endfor clouds=allskyimagerminusb return, clouds end function calculate_mask ;maskeleme image_path='C:\mask2\maskcircle.jpg' READ_JPEG, image_path, maskimage maskimage=REFORM(maskimage[0, *, *]) sizemask=size(maskimage) reform_size_mask=sizemask(4) 50 maskimage=reform(maskimage,1,reform_size_mask) return,maskimage end function rgb_to_xyz,R,G,B ;RGB xyz dönüşümü var_R = float( R / 255 ) ;R from 0 to 255 var_G = double( G / 255 ) var_B = float( B / 255 ) ;G from 0 to 255 ;B from 0 to 255 if var_R gt 0.04045 then begin var_R = var_R + 0.055 var_R = var_R/ 1.055 var_R = var_R ^ 2.4 endif else begin var_R = var_R / 12.92 endelse if var_G gt 0.04045 then begin var_G = var_G + 0.055 var_G = var_G/ 1.055 var_G = var_G ^ 2.4 endif else begin var_G = var_G / 12.92 endelse if var_B gt 0.04045 then begin var_B = var_B + 0.055 var_B = var_B / 1.055 var_B = var_B ^ 2.4 endif else begin 51 var_B = var_B / 12.92 endelse var_R = var_R * 100 var_G = var_G * 100 var_B = var_B * 100 ;Observer. = 2°, Illuminant = D65 X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805 Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722 Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505 xyz=float(indgen(3)) xyz[0]=X xyz[1]=Y xyz[2]=Z return,xyz end function xyz_to_lab,X,Y,Z ;xyz lab dönüşümü ref_X = 95.047 ; Observer= 2°, Illuminant= D65 ref_Y = 100.000 ref_Z = 108.883 var_X = X / ref_X ;ref_X = 95.047 var_Y = Y / ref_Y ;ref_Y = 100.000 var_Z = Z / ref_Z ;ref_Z = 108.883 if var_X gt 0.008856 then begin var_X = var_X ^ 0.333333 endif else begin var_X = 7.787 * var_X var_X = var_X + 0.137931034 52 Observer= 2°, Illuminant= D65 endelse if var_Y gt 0.008856 then begin var_Y = var_Y ^ 0.333333 endif else begin var_Y = 7.787 * var_Y var_Y = var_Y + 0.137931034 endelse if var_Z gt 0.008856 then begin var_Z = var_Z ^ 0.333333 endif else begin var_Z = 7.787 * var_Z var_Z=var_Z+0.137931034 endelse L = ( 116 * var_Y ) - 16 a = 500 * ( var_X - var_Y ) b = 200 * ( var_Y - var_Z ) LAB=float(indgen(3)) LAB[0]=float(L) LAB[1]=a LAB[2]=b return,LAB end function mean_hsv,day_photo ;ortalama hsv maskimage=calculate_mask() in_bound=where(maskimage gt 50) out_bound=where(maskimage le 50) COLOR_CONVERT, day_photo, day_photo_hsv, /RGB_HSV 53 H = REFORM(day_photo_hsv[0, *, *]) S = REFORM(day_photo_hsv[1, *, *]) V = REFORM(day_photo_hsv[2, *, *]) sky_photo_size=size(day_photo) H=reform(H,1,sky_photo_size(5)/sky_photo_size(0)) S=reform(S,1,sky_photo_size(5)/sky_photo_size(0)) V=reform(V,1,sky_photo_size(5)/sky_photo_size(0)) H=mean(H(in_bound)) S=mean(S(in_bound)) V=mean(V(in_bound)) result=[H,S,V] return,result end function cal_lab,day_photo ;ortalama lab maskimage=calculate_mask() in_bound=where(maskimage gt 50) out_bound=where(maskimage le 50) mask2=maskimage mask2(out_bound)=2 image_size=size(day_photo) day_photo_lab=fltarr(3,image_size(2),image_size(3)) for i=0,image_size(2)-1 do begin for k=0,image_size(3)-1 do begin xyz=rgb_to_xyz(float(day_photo(0,i,k)),float(day_photo(1,i,k)),float(day_photo(2,i,k))) lab=xyz_to_lab(float(xyz(0)),float(xyz(1)),float(xyz(2))) day_photo_lab(0,i,k)=(lab(0)/100)*256 day_photo_lab(1,i,k)=lab(1)+127 54 day_photo_lab(2,i,k)=lab(2)+127 endfor endfor lab=fltarr(3,image_size(2),image_size(3)); lab[0,*,*]=REFORM(day_photo_lab[0, *, *]) lab[1,*,*]=REFORM(day_photo_lab[1, *, *]) lab[2,*,*]=REFORM(day_photo_lab[2, *, *]) labtotal=REFORM(lab,3,image_size(5)/image_size(0)) labtotal=labtotal(*,in_bound) Lmean=mean(labtotal(0,*,*)) amean=mean(labtotal(1,*,*)) bmean=mean(labtotal(2,*,*)) result=[Lmean,Amean,bmean] return,result end function cloud_cluster_night,night_photo ;Gece alınan görüntülerde k-means yöntemi maskimage=calculate_mask() in_bound=where(maskimage gt 50) out_bound=where(maskimage le 50) mask2=maskimage mask2(out_bound)=2 night_photo_for_moon=night_photo sky_photo_size=size(night_photo) image_size=size(night_photo) meanhsv=mean_hsv(night_photo) meanhsv(1)=meanhsv(1)*100 if meanhsv(1) lt 4.8 then begin 55 cloudind=in_bound markmoon=0 endif else begin night_photo_xyz=fltarr(3,image_size(2),image_size(3)) night_photo_lab=fltarr(3,image_size(2),image_size(3)) for i=0,image_size(2)-1 do begin for k=0,image_size(3)-1 do begin xyz=rgb_to_xyz(float(night_photo(0,i,k)),float(night_photo(1,i,k)),float(night_photo(2,i,k))) lab=xyz_to_lab(float(xyz(0)),float(xyz(1)),float(xyz(2))) night_photo_xyz(0,i,k)=xyz(0) night_photo_xyz(1,i,k)=xyz(1) night_photo_xyz(2,i,k)=xyz(2) night_photo_lab(0,i,k)=(lab(0)/100)*256 night_photo_lab(1,i,k)=lab(1)+127 night_photo_lab(2,i,k)=lab(2)+127 endfor endfor ab=fltarr(2,sky_photo_size(2),sky_photo_size(3)); ab[0,*,*]=REFORM(night_photo_lab[1, *, *]) ab[1,*,*]=REFORM(night_photo_lab[2, *, *]) ab_two_dimen=REFORM(ab,2,sky_photo_size(5)/sky_photo_size(0)) ab_two_dimen2=ab_two_dimen(*,in_bound) openw,33,'idlicin2.txt' printf,33,ab_two_dimen2 close,33 spawn,'java -jar kmeans.jar',Weights Weights=reform(Weights,2,2) k=2 ;Weights = CLUST_WTS(ab_two_dimen2, N_CLUSTERS = k, N_ITERATIONS = 40) Kmean kümeleme işlemi idlde çalıştırılamadı.Bu kısım java ile yapıldı. 56 CenterInd = CLUSTER (ab_two_dimen2, Weights, N_CLUSTERS = 2) Center = TRANSPOSE(Weights) size_in_bound=size(in_bound) for l=0L,size_in_bound(1)-1 do begin mask2(in_bound(l))=CenterInd(l) endfor Center=float(Center) centertot=total(Center,2) meanall=centertot/2 mean1=meanall(0) mean2=meanall(1) if mean2 gt mean1 then begin cloudind=where(mask2 eq 1) endif else begin cloudind=where(mask2 eq 0) endelse markmoon=1 endelse redchannel=REFORM(night_photo[0, *, *]) greenchannel=REFORM(night_photo[1, *, *]) bluechannel=REFORM(night_photo[2, *, *]) redchannel=reform(redchannel,1,sky_photo_size(5)/sky_photo_size(0)) greenchannel=reform(greenchannel,1,sky_photo_size(5)/sky_photo_size(0)) bluechannel=reform(bluechannel,1,sky_photo_size(5)/sky_photo_size(0)) redchannel(cloudind)=0 greenchannel(cloudind)=0 bluechannel(cloudind)=0 night_photo2=bytarr(3,sky_photo_size(2),sky_photo_size(3)); night_photo2[0,*,*]=reform(redchannel,sky_photo_size(2),sky_photo_size(3)) 57 night_photo2[1,*,*]=reform(greenchannel,sky_photo_size(2),sky_photo_size(3)) night_photo2[2,*,*]=reform(bluechannel,sky_photo_size(2),sky_photo_size(3)) if markmoon eq 1 then begin night_photo3=find_moon(night_photo_for_moon,night_photo2) endif else begin night_photo3=night_photo2 endelse return,night_photo3 end function night_cloud,night ;Gece alınan görüntülerde karanlık gecede bulutluluk hesabı size_night=size(night) red=bytarr((size(night))(2),(size(night))(3)); red=reform(night[0,*,*]) dims = SIZE(red, /DIMENSION) yildiz_sayisi=night_cloud_yildiz_sayisi(night) if yildiz_sayisi lt 40 then begin maskimage=calculate_mask() in_bound=where(maskimage gt 50) cloudindex=in_bound red(cloudindex)=255 endif else begin if yildiz_sayisi gt 100 then begin ;do nothing clear sky endif else begin d=8 & B=shift(dist(2*d+1),d,d) LE d openedImg=MORPH_OPEN(red, B,/GRAY) maskimage=calculate_mask_yumurta() 58 in_bound=where(maskimage gt 50) out_bound=where(maskimage le 50) openedImg=reform(openedImg,1,(size(openedImg))(4)) openedImg_inbound=openedImg(in_bound) threshold=calculate_treshold(openedImg_inbound) whiteindex=where(openedImg gt threshold) blackindex=where(openedImg le threshold) red(whiteindex)=255 red(blackindex)=0 endelse endelse redchannel=REFORM(night[0, *, *]) greenchannel=REFORM(night[1, *, *]) bluechannel=REFORM(night[2, *, *]) redchannel=reform(redchannel,1,size_night(5)/size_night(0)) greenchannel=reform(greenchannel,1,size_night(5)/size_night(0)) bluechannel=reform(bluechannel,1,size_night(5)/size_night(0)) size_in_bound=size(in_bound) for l=0L,size_in_bound(1)-1 do begin if red(in_bound(l)) eq 255 then begin redchannel(in_bound(l))=255 greenchannel(in_bound(l))=255 bluechannel(in_bound(l))=255 endif endfor night[0,*,*]=reform(redchannel,size_night(2),size_night(3)) night[1,*,*]=reform(greenchannel,size_night(2),size_night(3)) night[2,*,*]=reform(bluechannel,size_night(2),size_night(3)) return,night 59 end function calculate_treshold,openedImg_inbound ;Otsu threshold histdata=histogram(openedImg_inbound) size_is=size(openedImg_inbound) total=ulong(size_is[2]*size_is[3]) sum =ulong(0) for t=0,255 do begin sum += ulong(t * histData[t]); endfor sumB = ulong(0); wB = ulong(0); wF = ulong(0); varMax = ulong(0); threshold = ulong(0); varBetween1=ulong64(0) varBetween=ulong64(0) for t=0,255 do begin wB = wB+histData[t] ; // Weight Background if wB eq 0 then begin continue endif wF = total - wB; // Weight Foreground if wF eq 0 then begin break endif sumB += t * histData[t] mB = sumB / wB; ; // Mean Background 60 mF = (sum - sumB) / wF; // Mean Foreground ; Calculate Between Class Variance varBetween1=wB * wF varBetween1=varBetween1/10000 if mB gt mF then t1=mB-mF if mF ge mB then t1 = mF-mB t2=t1*t1 varBetween = varBetween1*t2 ;Check if new maximum found if varBetween gt varMax then begin varMax = varBetween; threshold = t; endif endfor return,threshold end function calculate_mask_yumurta ;Karanlık gecede maskeleme image_path='C:\mask2\maskyumurta2.jpg' READ_JPEG, image_path, maskimage maskimage=REFORM(maskimage[0, *, *]) sizemask=size(maskimage) reform_size_mask=sizemask(4) maskimage=reform(maskimage,1,reform_size_mask) return,maskimage end function find_moon_index,day_photo 61 ;Ay tespit READ_JPEG, 'C:\mask.jpg', maskimage sizemask=size(maskimage) reform_size_mask=sizemask(4) maskimage=reform(maskimage,1,reform_size_mask) in_bound=where(maskimage gt 50) out_bound=where(maskimage le 50) meanlab=cal_lab(day_photo) if meanlab(0) gt 150 then begin ayesik=250 endif else begin ayesik=200 endelse sky_photo_size=size(day_photo) redChannel = REFORM(day_photo[0, *, *]) greenChannel = REFORM(day_photo[1, *, *]) blueChannel = REFORM(day_photo[2, *, *]) redChannel=reform(redChannel,1,sky_photo_size(5)/sky_photo_size(0)) greenChannel=reform(greenChannel,1,sky_photo_size(5)/sky_photo_size(0)) blueChannel=reform(blueChannel,1,sky_photo_size(5)/sky_photo_size(0)) totalpixel=(size(in_bound))(1) count1=ulong(0) for pp=0L,totalpixel-1 do begin if blueChannel(in_bound(pp)) gt ayesik then begin count1=count1+1 endif endfor if count1 ne 0 and count1 lt 108317 then begin;burdaki 108317 hicbiri mavi olmazsa moonindex = make_array(count1,/ulong) 62 lilos=ulong(0) for ps=0UL,totalpixel-1 do begin if blueChannel(in_bound(ps)) gt ayesik then begin moonindex(lilos)=in_bound(ps) lilos=lilos+1 endif endfor moonindex=reform(moonindex,1,(size(moonindex))(1)) maskimage(0,*)=0; maskimage(moonindex)=255; maskimage=reform(maskimage,sizemask(1),sizemask(2)) maskimage=maskimage GT 150 dims = SIZE(maskimage, /DIMENSIONS) regions = LABEL_REGION(maskimage) hist = HISTOGRAM(regions) FOR i=1, N_ELEMENTS (hist) - 1 DO begin if hist(i) lt 250 then regions(where (regions eq i))=0 endfor regionindex=where(regions ne 0) if (size(regionindex))(0) gt 0 then begin regions(where (regions ne 0))=1 maskimage=regions d=5 & B=shift(dist(2*d+1),d,d) LE d closing = MORPH_CLOSE(maskimage, B) moonindex=where(closing eq 1) endif endif else begin moonindex=0 endelse 63 return ,moonindex end function find_moon,day_photo_for_moon,day_photo ;ay tespit sky_photo_size=size(day_photo) index=find_moon_index(day_photo_for_moon) redchannel=REFORM(day_photo[0, *, *]) greenchannel=REFORM(day_photo[1, *, *]) bluechannel=REFORM(day_photo[2, *, *]) redchannel=reform(redchannel,1,sky_photo_size(5)/sky_photo_size(0)) greenchannel=reform(greenchannel,1,sky_photo_size(5)/sky_photo_size(0)) bluechannel=reform(bluechannel,1,sky_photo_size(5)/sky_photo_size(0)) redchannel(index)=255 greenchannel(index)=0 bluechannel(index)=0 day_photo[0,*,*]=reform(redchannel,sky_photo_size(3),sky_photo_size(2)) day_photo[1,*,*]=reform(greenchannel,sky_photo_size(3),sky_photo_size(2)) day_photo[2,*,*]=reform(bluechannel,sky_photo_size(3),sky_photo_size(2)) return,day_photo end function find_sun_index,day_photo ;güneş tespit maskimage=calculate_mask() in_bound=where(maskimage gt 50) out_bound=where(maskimage le 50) COLOR_CONVERT, day_photo, day_photo_hsv, /RGB_HSV H = REFORM(day_photo_hsv[0, *, *]) 64 S = REFORM(day_photo_hsv[1, *, *]) V = REFORM(day_photo_hsv[2, *, *]) sky_photo_size=size(day_photo) H=reform(H,1,sky_photo_size(5)/sky_photo_size(0)) S=reform(S,1,sky_photo_size(5)/sky_photo_size(0)) V=reform(V,1,sky_photo_size(5)/sky_photo_size(0)) totalpixel=(size(in_bound))(1) l=0L for p=0L,totalpixel-1 do begin if ((S(in_bound(p)) lt 0.0390625) and (V(in_bound(p)) gt 0.78125)) then begin l=l+1 endif endfor if l ne 0 and l lt (size(in_bound))(1) then begin;burdaki 108317 hicbiri mavi olmazsa sunindex = make_array(l,/ulong) l=0L for p=0L,totalpixel-1 do begin if ((S(in_bound(p)) lt 0.0390625) and (V(in_bound(p)) gt 0.78125)) then begin sunindex(l)=in_bound(p) l=l+1 endif endfor sunindex=reform(sunindex,1,(size(sunindex))(1)) maskimage(0,*)=0; maskimage(sunindex)=255; sizemask=size(maskimage) maskimage=reform(maskimage,502,429) maskimageorj=maskimage dims = SIZE(maskimage, /DIMENSIONS) 65 d=4 & B=shift(dist(2*d+1),d,d) LE d eroded = erode(maskimage, B) regions = LABEL_REGION(eroded) hist = HISTOGRAM(regions) if N_ELEMENTS(hist) gt 1 then begin biggest=0 biggesthist=0 FOR i=1, N_ELEMENTS (hist) - 1 DO begin if hist(i) gt biggesthist then begin biggesthist=hist(i) biggest=i endif endfor regions(where (regions ne biggest))=0 regions(where (regions eq biggest))=1 endif regionindex=where(regions eq 1) if (size(regionindex))(0) gt 0 then begin regions(where (regions ne 1))=0 maskimage=regions d=4 & B=shift(dist(2*d+1),d,d) LE d dilated = dilate(maskimage, B) result2=region_fill(dilated,[1,600]) sunindex=where(result2 eq 1) endif endif else begin sunindex=0 endelse return ,sunindex 66 end function find_sun,day_photo_for_sun,day_photo ;güneş tespit sky_photo_size=size(day_photo) index=find_sun_index(day_photo_for_sun) redchannel=REFORM(day_photo[0, *, *]) greenchannel=REFORM(day_photo[1, *, *]) bluechannel=REFORM(day_photo[2, *, *]) redchannel=reform(redchannel,1,sky_photo_size(5)/sky_photo_size(0)) greenchannel=reform(greenchannel,1,sky_photo_size(5)/sky_photo_size(0)) bluechannel=reform(bluechannel,1,sky_photo_size(5)/sky_photo_size(0)) redchannel(index)=255 greenchannel(index)=0 bluechannel(index)=0 day_photo[0,*,*]=reform(redchannel,sky_photo_size(3),sky_photo_size(2)) day_photo[1,*,*]=reform(greenchannel,sky_photo_size(3),sky_photo_size(2)) day_photo[2,*,*]=reform(bluechannel,sky_photo_size(3),sky_photo_size(2)) return,day_photo end 67 ÖZGEÇMİŞ İsmail Başlar 06.12.1978 tarihinde Adana'da doğdu. İlk, orta ve lise öğrenimini Adana’da tamamladı. 1997 yılında girdiği Çukurova Üniversitesi Mühendislik Fakültesi Elektrik Elektronik Mühendisliği Bölümü’nden 2002 yılında mezun oldu. 2005 yılından bu yana TÜBİTAK Ulusal Gözlemevi’nde uzman yardımcısı olarak çalışmaktadır. 68