Gray Scale bir resim ile görüntü işleme(Edge detection)


Özet:
Matlab ile görüntü işleme yapacağız. Benim gibi matlab lisansı olmayanlar “Octave” isimli open source projeyi kullanabilirler. 65 mb civarı bir dosyası var. Gray scale bir resim bulmamız gerekiyor. Bunun için genelde “lena” isimli bayanın resmi kullanılır. Lena eskilerin playboy kapak kızlarından. Zaman zaman içinde kalbur zaman içinde diyebileceğimiz zaman diliminde image processing yapan arkadaşların büyük bir bölümünün erkek olduğunu düşünürsek bu çokta yadırganacak bir durum değil. Bayan arkadaşlar kendi resimlerinizle denemeyin lütfen aynı sonuçları elde edemeyebilirsiniz :) Çalışmamızda 2D filtreler kullanıp ,2D resimler üzerinde x ve y yönünde edge detection yapmaya çalışacağız. Daha sonra detect ettiğimiz bu resimler üzerindeki match point’leri belirlemeye çalışacağız. Gradient filtre matrislerini kullanacağız. Başka matrislerde aynı yöntemlerle kullanılabilir.
Açıklama;
Resmimizi ayarladıktan sonra Octave’in çalıştığı path’e kopyalıyoruz(ya da bir path verilerekte resim okunabilir tabi). Matlab kullanan arkadaşlarda Current workspace’lerini resmin olduğu path olarak ayarlıyorlar.Şimdi sıra resmimizi okumaya geldi. Aşağıdaki komutu verip resmimizi bir değişkene atıyoruz.

Resim=imread(“lena.jpg”);

Resim isimli değişkenin kaça kaçlık bir matris olduğunu görmek için aşağıdaki komutu veriyoruz;

Size(Resim);

Ardından x yönündeki filtremizi oluşturuyoruz;

Px=[-1/2,0,1/2];

Y yönündeki filtremizde aşağıdaki gibi olmalı;

Py=[-1/2;0;1/2];

Şimdi x yönündeki filtreyi uygulayalım;

Gx=filter2(px,Resim,”same”);

Şimdide resmi gösterelim;

imshow(gx);

Gösterim işleminde filtreyi üzerinde gezdirdiğimiz gx matrisini kullandık. Matristeki tüm elemanları olduğu gibi yazdırdığımız için x yönündeki tüm edge’leri detect ettik ancak ortamda biraz noise kaldı. Bunlardan arınmak için range’imizi biraz küçültebiliriz, sadece 0-100 arasındaki değerleri gösterelim;

imshow(gx,[0,100]);

Gördüğünüz gibi Lena’nın şapkası, saçları ,göz çeperleri daha net ortaya çıktı.
Y yönündeki filtremizi uygulayacak olursak;

py=[-1/2;0;1/2];
gy=filter2(py,Resim,"same");
imshow(gy);

Şimdide y yönündeki edge’leri detect ettik.Y yönündeki kernel’ımız ile elde ettiğimiz sonuçlarda fazla gürültülü, bu sonuçlarıda noise’dan arındıralım;

imshow(Resim,[0,100]);


Şimdi ise sırada x ve y yönlerindeki kernel’lar ile elde ettiğimiz edge’lerin match edip etmediğine bakmak var. Örneğin x gradient ile baktığımız bir nokta ve y gradient ile baktığımız bir nokta arasında match olup olmadığına aşağıdaki formül ile bakabiliriz;
Örneğin;
X1 noktası ile Y1 noktasının eşleşmesine |L|=sqrt(X1^2+x2^2) şeklinde bakabiliriz. Bunu tüm iki matrisede uygularsak match point’leri elde ederiz.
Gx ve Gy matrislerimizi yukarıda hesaplamıştık bu yüzden tekrar hesaplamıyoruz.

Result=sqrt(Gx.^2%Gy.^2);
imshow(result);


Artık match point’lerimizi bulduk. Match etmeye çalışmamızın amacı double check yapıp bir edge bulduğumuzdan emin olmak aslında. Yukarıdaki formülde Gx.^2 şeklinde yazdığım ifadede “.” İşaretinin anlamı matristeki her elemanın tek tek karesini almak. Yani matrisin karesini almıyoruz , buna dikkat etmek gerekiyor.

Elde ettiğimiz match matrisimizin biraz gürültülü oludğu aşikar. Dolayısıyla noise’lerden arındırıyoruz;

imshow(result,[0,100]);

Rastgele Yazılar

Gray Scale bir resim ile görüntü işleme(Edge detection) ile Benzer Yazılar:

27 March 2011 Saat : 5:40

Gray Scale bir resim ile görüntü işleme(Edge detection) Yazısı için Yorum Yapabilirsiniz

 Son Yazılar FriendFeed
reklam
seo kitabı
reklam
reklam

Translate

EnglishFrenchGermanItalianPortugueseRussianSpanishTurkish