Bir Programın Düşündürdükleri

Geçenlerde internette aylak aylak dolaşırken Stephan Hawking, Arthur C. Clarke ve Carl Sagan’ın konuk olduğu eski bir televizyon programına denk geldim. Kara delikler, büyük patlama, evrenin genişlemesi gibi konularda tartışıyor daha doğrusu sohbet ediyorlardı. Sohbet diyorum, çünkü sunucu Hawking’e soruyor; Hawking o enteresan yazılımı kullanarak cevap veriyor; Sagan, Hawking’in cevabını daha anlaşılır bir dille sunucuya aktarıyor; Clarke ise aralara dalıp eklemeler yapıyordu.

God, The Universe and Everything Else (1988) programı
God, The Universe and Everything Else (1988).

Stüdyo’da Clarke’ın hemen yanına IBM marka bir PC koymuşlardı. Bilgisayarı görür görmez kullandığım ilk Amstrad CPC 664 bilgisayar aklıma geldi. Evdeki Bilim Teknik'leri karıştırırken IBM PC resimlerine biraz kıskançlıkla bakar, keşke bu bilgisayardan bende de olsa derdim. Çünkü derginin her hafta yayınladığı küçük programlar IBM'e uygundu ve Amstrad için çalışmıyordu. Ben de mecburen Amstrad'ın kullanma kılavuzundaki örnek programları ne işe yaradıklarını pek de anlamadan bilgisayara girmeye çalışırdım.

Fraktallar Dünyasına Giriş

Programda en az PC kadar ilgimi çeken ise monitore yerleştirdikleri grafikti. Fraktal yapılara az buçuk aşina olanlar Benoit Mandelbrot'un meşhur fraktalını hemen hatırlar. Hani devamlı "zoom" yapmamıza rağmen sonuna bir türlü erişemediğimiz bilgisayar grafiği. İçine girdikçe birbirinden ilginç geometrik şekillerle karşılaştığımız grafik. Hatta Linux üzerinde bazı fraktalları incelememezi sağlayan Xaos adlı bir program vardı zamanında. Mac OS X'e de port etmişler şimdi. İndirip kurcalayabilirsiniz.

Xaos fraktal programı
Xaos fraktal programı.

Arthur C. Clarke işte bu fraktalı çizen ve istediği bölgesine zoom yapabildiği bir program yazdığını anlatmaya başladı. Hatta Sri Lanka'daki evinden yola çıkmadan önce programı çalıştırdığını ve saatler sürdüğünü anlatırken Mandelbrot'un fraktallarla ilgili yazdığı "The Fractal Geometry of Nature" adlı kitap aklıma geldi. Xaos ile fraktalları kurcalarken bari biraz anlayalım şu işi diye kitaba göz atmıştım. Hatta hiç unutmuyorum, nasıl olsa boş vaktim olur da kitabı hatmederim diyerek koca kitabı askere giderken yanıma bile almıştım. Daha da garibi kitabı İTÜ kütüphanesinden ödünç almıştım. Gerçekten de bir müddet okudum kitabı ama o kadar büyük ve ağırdı ki askerliğin sonlarına doğru dolabımdan pek çıkarmamaya başlamıştım. Bu arada işi iyice abartıp silme kitap dolu koca bir bavulu nizamiyeden sokan birisini de tanıdığımı belirtmek isterim. Yalnız değildim anlayacağınız.

'The fractal geometry of nature' kitabının kapağı
Benoi B. Mandelbrot'un "The fractal geometry of nature" kitabı.

Kitaba dönecek olursa, Mandelbrot birçok doğal oluşumun kendini tekrar eder nitelikte olduğunu, dolayısı ile bir tür fraktal olduğunu açıklarken örnek olarak kıyıların girintili çıkıntılı yapısını verir. Hatta fraktal çalışmalarını bilim camiasına kabul ettirebilmek için "How long is the coast of Britain?" adlı çarpıcı bir yayın yapmıştır. Kitapta bu konu hakkında da uzunca malumat vardır.

Anlatılanları kısaca özetleyelim. Tahmin edileceği gibi kıyı uzunlukları kullanılan ölçeğe göre değişir. Ölçeğin büyümesi, haritalarda daha fazla ayrıntının yer almasını, dolayısı ile daha hassas ölçüm yapılmasını sağlar. Hatta ölçek büyüdükçe kıyı uzunluğunun artarak belli bir değere yakınsaması beklenir. İşte Mandelbrot bunun her zaman böyle olmadığını, ölçek büyüdükçe sınır uzunluğunun da sonsuza doğru gidebildiğini iddia etmektedir bu makalesinde. Hatta sonsuza ıraksama hızının o kıyının fraktal boyutu ile orantılı olduğunu gösterir.

Google Earth ile Sınırları Ölçmek

İşte tam burada "acaba Türkiye'nın kıyı sınırları için böyle bir çalışma yapılmış mıdır?" sorusu aklıma geldi. Biraz araştırdım ama birşey bulamadım. Sonra kendim Google Earth ile ölçüm yapmaya ve kıyı sınır uzunluğunun hassasiyet arttıkça sonsuza gittiğini göstermeye çalıştım. Planıma göre girinti çıkıntısı çok olan bir kıyı seçtikten sonra Google Earth ile sınırı manuel olarak ölçecektim. Sonra "zoom" seviyesini arttırdıktan sonra aynı parçayı, bu sefer biraz daha hassas olarak ölçecektim. Hesabıma göre birkaç adım sonra sınır uzunluğu belirli bir değere yakınsamak yerine sonsuza ıraksayacaktı.

Kaba ve hassas iki farklı ölçek ile sınır ölçümü
Google Earth ile farklı iki ölçekte sınır ölçümü.

Tabii ki evdeki hesap çarşıya uymadı. Sebep mi?

  1. Google Earth ile ölçüm yaparken kullandığım doğru parçalarını eşit uzunlukta seçmek imkansız. Fare ile manuel kontrol edildiği için noktalar arası uzunluk sabit kalmıyor. Halbuki fraktal boyutunu hesaplayabilmem için ölçek olarak kullandığım uzunluk biriminin sabit olması gerekiyor.
  2. Bir diğer zorluk ise resimlerin çözünürlüğünün yüksek olmaması.
  3. En önemli zorluk ise "zoom" seviyesi arttıkça elle ölçümün çok vakit alması. Hassas ölçüm yapabilmek için kıyıda yürüyüş yapar gibi ölçüm yapmalısınız. Sadece Datça yarımadasını ölçmek bile ölçmek günler alacaktır.

Atatürk Baraj Gölü'nün Alanını Ölçmek

İşte bu sebeplerden dolayı elle değil otomatik olarak yapmanın yollarını aramaya başladım. Eğer Ege kıyılarının yüksek çözünürlüklü fotoğrafları elimde olursa, görüntü işleme teknikleri ile kıyı uzunluğunu farklı ölçeklerle otomatik olarak bulabilirdim. Bu tip bir görüntü bulamayacağımı düşünürken NASA'nın sitesinden "Turkey" kelimesini aratayım dedim. Karşıma Atatürk Baraj'ının 2002 yılında çekilmiş uydu fotoğrafı çıkınca sevindim çünkü baraj gölünün kıyıları tam aradığım nitelikteydi.

Atatürk Barajı
Atatürk Barajı'ndan genel görünüm ve örnek bir ayrıntı.

Gölün sınır uzunluğunu ölçebilmek için öncelikle su ile karayı dijital olarak birbirinden ayırmam gerekiyor. Peki bunu nasıl yapacağım? İlk akla gelen renkleri kullanarak ayırmak. Fotoğrafa uzaktan bakıldığında mavi rengi su, diğerlerini ise kara olarak sınıflandırarak kolayca çözülür gibi geldi ama yakından bakılınca mavi üzerinde bir eşik koymanın çok kolay olmadığı hemen anlaşılıyor çünkü ton farklılıkları bulunuyor.

Ben de bu yüzden 3 renk kanalını birden incelemeye karar verdim. Fotoğrafın içinden bolca örnek alıp her eksen bir kanala karşılık gelecek şekilde 3 boyutlu saçılım grafiğine bakarak suya tekabül eden pikseller için bir eşik değer bulabileceğimi düşündüm. Bunun için aşağıdaki MATLAB programını yazdım.

% Oncelikle wikipedia'dan indirdigimiz fotoyu okuyoruz
resim=imread('landsat_ataturk_24aug02_57m.jpg');

% size ile boyutlarini ogreniyoruz.
%  nx: satir sayisi (1480)
%  ny: sutun sayisi (1973)
%  nb: kanal sayisi (3)
[nx,ny,nb]=size(resim);

% 3 boyutlu matrisi 2 boyuta indirgiyorum ki kolay calisabileyim
all=reshape(resim,nx*ny,nb);

% all matrisinden 1000 tane rastgele pixel seciyorum
sel=all(unique(sort(randi([1 nx*ny],1000,1))),:);

% Kanal 1 ile Kanal 2'yi karsilastiyorum.
figure
scatter(sel(:,1),sel(:,2))
xlabel('Kanal 1','FontSize',20); ylabel('Kanal 2','FontSize',20);
export_fig('-png','Kanal12.png');

% Kanal 1 ile Kanal 3'u karsilastiyorum.
figure
scatter(sel(:,1),sel(:,3))
xlabel('Kanal 1','FontSize',20); ylabel('Kanal 3','FontSize',20);
export_fig('-png','Kanal13.png');

% Kanal 2 ile Kanal 3'u karsilastiyorum.
figure
scatter(sel(:,2),sel(:,3))
xlabel('Kanal 2','FontSize',20); ylabel('Kanal 3','FontSize',20);
export_fig('-png','Kanal23.png');

% Son olarak 3 boyutlu sacilim grafigine bakiyorum
figure
scatter3(sel(:,1),sel(:,2),sel(:,3));
xlabel('Kanal 1','FontSize',20); ylabel('Kanal 2','FontSize',20); 
zlabel('Kanal 3','FontSize',20);
export_fig('-png','Kanal123.png');
Kanalların birbiri ile karşılaştırılmasını sağlayan MATLAB programı.

MATLAB bana aşağıdaki 4 grafiği verdi. Birincisi 3 boyutlu saçılım grafiği. Buna bakar bakmaz 2 tane belirgin öbek çarpıyor. Bunlardan büyük olan kitle, kara parçasından alınan piksel örneklerine karşılık gelmeli çünkü fotoğrafın büyük bölümünde tarlalar var. Orijine yakın bölümünde oluşan küçük öbek ise baraj gölüne denk gelen pikseller olmalı. Diğer 3 resim ise kanalların ikili karşılaştırmaları. Başka bir değişle 3 boyutlu saçılım grafiğine 3 farklı açıdan baktığınızı düşünebilirsiniz.

Kanal 1,2 ve 3 Kanal 1 ve 2 Kanal 1 ve 3 Kanal 2 ve 3
Kanalların birbiri ile karşılaştırılması.

Şimdi burada amacımız küçük öbeği, büyüğünden ayırd edecek bir eşik koymak. Dikkatle bakınca bu iş için en uygun kanalın birinci kanal olduğu görülüyor. Kanal1 < 15 gibi basit bir kural koyarsak su ile karayı kabaca ayırd edebiliyoruz. Eşik değerini uygulayarak orjinal fotoğrafı siyah beyaz'a dönüştürmek için aşağıdaki kodu yazdım ve çalıştırdım.

% 1. kanal < 15 ise 1 degilse 0 uret
tematik1D=all(:,1) <15;

% 0/1 degerlerini orjinal foto boyutlarina getir
tematik2D=reshape(tematik1D,nx,ny);

% Tematik haritayi cizdir
figure
imagesc(tematik2D);
colormap gray
export_fig('-png','tematik2D.png');
Eşik değerini uygulayarak tematik haritayı oluşturan MATLAB komutları.

Ve böylece su ile karayı ayırd edebildik. Barja gölünün dışarısında görünen ufak tefek beyazlıklar gerçekten de sulak alanlar. Ama çok küçük olduğu için hesaplamaları etkilemez diye düşündüm.

Tematik harita
Tematik harita.

Baraj gölünü oluşturan pikselleri belirlediğime göre gölün alanını hesaplayabilirim. Bunun için yapmam gereken pikselleri saymak ve sonucu bir piksele karşılık gelen alan ile çarpmak. Bu fotoğrafı aldığım NASA'nın sitesinde fotoğrafın the Landsat 7 Enhanced Thematic Mapper Plus (ETM+) uydusu ile çekildiği belirtiliyordu. Bu uydunun çözünürlüğünü araştırınca 30 m olduğunu gördüm. Toplam 203103 adet beyaz piksel olduğuna göre baraj gölünün alanını kabaca 203103*30*30/10^6 = 182 km2 olarak hesapladım.

Uydu fotoğrafının çözünürlük bilgisi
Baraj görüntüsünün çözünürlük bilgisi.

Baraj Gölünün Alanı

Sonucu doğrulamak için baraj gölünün alanını internette araştırdım. Neredeyse bütün kaynaklarda 817 km2 olarak geçiyordu. Benim bulduğum değerden çok fazla olduğu için şaşırdım açıkçası. Ancak her yıl farklı olabilir diye DSİ'nin sitesinin 2002 yılındaki kopyasını kontrol ettim. Orada da 817 km2 diyordu. Demek ki belirli bir su seviyesine göre hesaplanan yüzölçümünden bahsediliyordu. Gerçekten de DSİ'nin 2002 yılındaki sitesinde de "Normal su kotunda göl alanı" 817 km2 diyordu. Uzaktan algılma ile elde edilmiş bir yüzölçümü bulamadım. Hesabımı şimdilik doğru kabul ediyorum.

Atatürk Barajı ile ilgili teknik bazı bilgiler
Atatürk Baraj Gölü'nün alanı ile ilgili bilgi.