You are on page 1of 7

Active Contour (Snakes) Modeli İle

Görüntülerin Bölütlenmesi
Avtive Contour (Snakes) modeli, bir görüntüdeki objelerin kenarlarını tespit etmek ve objeleri
bölütlemek için kullanılan bir yapıdır. Basitçe açıklamak gerekirse görüntüdeki objenin etrafını
çevreleyen bir şeridi oluşturan noktalar kademeli olarak objeye doğru yaklaşırlar ve obje kenarlarına
gelindiğinde bu işlem sona erer. Böylece obje kenarları tespit edilmiş olur (Şekil 1).

Şekil 1
Bu yazıda MATLAB’de bu işlemi gerçekleştirmek için kullanılan activecontour fonksiyonu
kullanılarak bu metodun nasıl uygulandığı anlatılmıştır.
Bu fonksiyon şu şekilde çağrılır:

bw = activecontour(A,maske,n,metot);

bw : Bölütlenmiş objelerin beyaz, arkaplanın siyah ile gösterildiği siyah-beyaz tonlamalı


görüntü.
A : 2 boyutlu (RBG formatı 3 boyutludur) gri tonlamalı bir görüntü.
maske : Active Contour şeridinin başlangıç konumunu belirlemekte kullanılacak olan, A görüntüsü
ile aynı boyutlarda siyah-beyaz tonlamalı bir görüntü. Maskenin arka planı siyah, içindeki obje beyaz
olmalıdır. Beyaz objenin sınırları Active Contour şeridinin başlangıç konumu olarak belirlenir.
n : İterasyon sayısı. Şeridi oluşturan noktaların yer değiştirme işlemi en fazla n iterasyon
kadar gerçekleştirilir. İterasyon ile ilgili bir parametre girilmezse varsayılan iterasyon 100 olarak
belirlenir.
metot : Objelerin bölütlenmesinde kullanılacak metot seçimi. activecontour fonksiyonunda ‘Chan-
Vese’ ve ‘edge’ olmak üzere iki metot tanımlıdır. Metot ile ilgili bir parametre girilmezse varsayılan
metot ‘Chan-Vese’ olarak belirlenir. ‘Chan-Vese’ metodunda objeyi çevreleyen şerit içeri ya da dışarı
doğru hareket etme kararını görüntünün özelliklerine göre verir. ‘edge’ metodunda ise şerit içeri
doğru hareket etmektedir.
Aşağıdaki örneklerde bu metotlar incelenmiştir.
Öncelikle bölütlenecek görüntüyü ve kullanılacak maskeyi elde edelim (Şekil 2)

A = imread('coins.png');
subplot(1,2,1)
imshow(A)
title('Orjinal Görüntü');

maske = zeros(size(A));
maske(25:end-25,25:end-25) = 1;
subplot(1,2,2)
imshow(maske)
title('Active Contour Başlangıç Konumu');

Şekil 2

Görüntüyü varsayılan metot olan ‘Chan-Vese’ ile iterasyon sayısını 300 olarak belirleyerek
bölütleyelim ve bölütlenmiş görüntüyü gösterelim (Şekil 3).

bw = activecontour(A,maske,300);
figure, imshow(bw);
title('Bölütlenmiş Görüntü, Chan-Vese, 300 iterasyon ile');

Aynı işlemi iterasyon sayısını belirtmeden (varsayılan olarak 100 alınacaktır) gerçekleştirdiğimizde
elde edeceğimiz sonuç çok farklı olacaktır (Şekil 3).

bw = activecontour(A,maske);
figure, imshow(bw);
title('Bölütlenmiş Görüntü, Chan-Vese, 100 iterasyon ile');
Şekil 3

Aynı görüntüyü Edge metodu ile iterasyon sayısını 300 olarak belirleyerek bölütleyelim ve
bölütlenmiş görüntüyü gösterelim (Şekil 4)

bw = activecontour(A,maske,300,’edge’);
figure, imshow(bw);
title('Bölütlenmiş Görüntü, Edge, 300 iterasyon ile');

Şekil 4

Görüldüğü gibi görüntü bölütlemede metot seçimi ve iterasyon sayısında sabit bir kural bulunmayıp
bu parametreler görüntünün özelliklerini göre seçilmelidir. Örneğin Edge metodu içbükey hatlara
sahip objelerin kenarlarını ortaya çıkarmak için elverişli olmayabilir. Aşağıdaki örnekte hem Edge
metodu hem de Chan-Vese metodu iç bükey hatlara sahip olan ve olmayan iki farklı obje üzerine
uygulanmış ve sonuçları gösterilmiştir (Şekil 5).
A = imread('sample-image-1.jpg');
A = rgb2gray(A);
subplot(4,2,1)
imshow(A)
title('Orjinal Görüntü (A)');

maskeA = zeros(size(A));
maskeA(35:170,45:210) = 1;
subplot(4,2,3)
imshow(maskeA)
title('Active Contour Başlangıç Konumu (A)');
bwA_edge = activecontour(A,maskeA,300,'edge');
bwA_chan = activecontour(A,maskeA,300,'Chan-Vese');
subplot(4,2,5)
imshow(bwA_edge)
title(sprintf('%s\n%s','Bölütlenmiş Görüntü','Edge metodu, 300 iterasyon ile (A)'));
subplot(4,2,7)
imshow(bwA_chan)
title(sprintf('%s\n%s','Bölütlenmiş Görüntü','Chan-Vese metodu, 300 iterasyon ile (A)
'));

B = imread('sample-image-2.jpg');
B = rgb2gray(B);
subplot(4,2,2)
imshow(B)
title('Orjinal Görüntü (B)');

maskeB = zeros(size(B));
maskeB(35:170,45:210) = 1;
subplot(4,2,4)
imshow(maskeB)
title('Active Contour Başlangıç Konumu (B)');
bwB_edge = activecontour(B,maskeB,300,'edge');
bwB_chan = activecontour(B,maskeB,300,'Chan-Vese');

subplot(4,2,6)
imshow(bwB_edge)
title(sprintf('%s\n%s','Bölütlenmiş Görüntü','Edge metodu, 300 iterasyon ile (B)'));
subplot(4,2,8)
imshow(bwB_chan)
title(sprintf('%s\n%s','Bölütlenmiş Görüntü','Chan-Vese metodu, 300 iterasyon ile (B)
'));
Şekil 5
Görüntünün ve objelerin özelliklerine göre uygun metodu seçmek kadar uygun maskeyi belirlemek
de önemlidir. Özellikle Edge metodunda şeridin noktaları dışardan içeriye doğru hareket ettiği için
belirlenecek olan maske sınırlarının objenin dışında yer alması ile birlikte objeye olabilecek en yakın
mesafede yerleştirilmesi daha hızlı ve doğru sonuçlar elde edilmesinde yararlı olacaktır.
Active Contour modelinin teorik alt yapısı ve MATLAB’de kullanımıyla ilgili daha fazla ayrıntıya
aşağıdaki kaynaklardan ulaşılabilir.

1. Active contour model


2. MATLAB activecontour foksiyonu

Bu yazıdaki çalışmalar MATLAB R2013a sürümü ile gerçekleştirilmiştir. Kullandığınız sürüme bağlı
olarak bazı fonksiyonlar çalışmayabilir ya da kullanımı farklı olabilir.

You might also like