Nano'nun Günlüğü…

Ideallerimi gerceklestirmek icin arastiriyorum, Unutmamak icin yaziyorum!

  • Bulundugunuz Sayfa: 
  • Ana Sayfa
  • Karinca Koloni Algoritmasi Ile Kenar Tespit Yontemi

Karinca Koloni Algoritmasi Ile Kenar Tespit Yontemi

Gönderim Şubat 15th, 2014

Bu makalemde, karinca koloni algoritmasinin kenar bulmayla ilgili matlab kodlari, ekran goruntuleri ve basari sonuclarini inceleyebilirsiniz.

Bu calisma Yalova Universitesi – Fen Bilimleri Enstitusu – Bilgisayar Muhendisligi Ana Bilim Dali – Bilgisayarli Gorme dersi icin hazirlanmistir.

KKA Kullanilarak Goruntulerde Kenar Tespit Yontemi Kullanimi

Bu calismamizda, goruntu uzerindeki kenarlarin tespit edilmesinde cok saglikli sonuclar alinabildigi gibi nadir de olsa basarisiz sonuclarda alabiliyoruz. Calismada zamandan tasarruf edebilmek adina, kullanilan goruntuler 128X128 boyutlarinda ve 8 bitlik olacak sekilde hazirlanmistir. Bu istege bagli olarak baska calismalarda degistirilebilir. Calismada goruntuler uzerinde islemleri en hizli sekilde gerceklestirebilmek adina Matlab programinin 7.9.0 / R2009b versiyonu kullanilmistir. Asagidaki goruntulerde iterasyon sayisi 3 olarak kullanilarak kenar tespit algoritmasi ile almis oldugumuz goruntuler bulunmaktadir. Kullanilan toplam karinca sayilarini goruntunun satir ve sutun pixel degerlerine gore belirliyoruz. Burada 128 X 128 piksel degerlerine uygun yaklasik olarak 300 degeri verilmektedir. Varsayilan olarak alpha ve beta degerlerini 1 verilir. Phi degerleri 0 – 0.1 deger araliklarindayken, Rho degerleri 0 – 1 deger araliklarinda kullanilabilir.

Edge Detection By Ant Colony Algorithm Uygulamasinin Ekran Goruntuleri;

Matlab Gui Tasarimi

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bu calismada, Matlab’in gui tool’u kullanilarak kullanici arayuzu ile algoritmanin onemli verilerini kullanicidan isteniyor.

Formun uzerinde push button yardimiyla kullanicidan algoritmasi uygulanacak image isteniyor. Secilen image, Axes1 icerisinde gozukmesi icin ilgili kodlar arka planda yaziliyor. Gui tool’una ait slider’lar yardimiyla kullanicidan olasilik formullerinde kullanilacak olan alpha, beta, rho ve phi sayilari isteniyor. Edit text’ler yardimiyla algoritmanin iterasyon sayisini ve yine image’in boyutlarina uygun olacak sekilde algoritmada kullanilacak karinca sayisinin girisleri yapiliyor. Uygulamanin calistirilabilmesi icin, Push button yardimiyla secilen image uzerinde karinca algoritmasi uygulaniyor. Ilgili image’in algoritma uygulanmis hali hemen Axes1’in yaninda bulunan Axes2 icerisinde kullaniciya sonucu sunuluyor. Algoritmanin calisma suresi ise static text’lerle kullaniciya raporlamis oluyoruz.

Uygulamanin Calistirilmis Hali

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bu calismada, kullanilan goruntuler 128X128 boyutlarinda olup; karinca sayisi, iterasyon sayisi, feromon buharlasma kat sayisi rho degeri ile feromon yok olma kat sayisi phi degerlerinin degisimleri ile goruntu uzerinde farkli kenar tespit sonuclari tespit edebiliyoruz.

Matlab Kodu;

function varargout = AntColonyAlgorithmWithEdgeDetectionGui(varargin)
gui_Singleton = 1;
gui_State = struct(‘gui_Name’,       mfilename, …
‘gui_Singleton’,  gui_Singleton, …
‘gui_OpeningFcn’, @AntColonyAlgorithmWithEdgeDetectionGui_OpeningFcn, …
‘gui_OutputFcn’,  @AntColonyAlgorithmWithEdgeDetectionGui_OutputFcn, …
‘gui_LayoutFcn’,  [] , …
‘gui_Callback’,   []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end

function AntColonyAlgorithmWithEdgeDetectionGui_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);

function varargout = AntColonyAlgorithmWithEdgeDetectionGui_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;

function edit1_Callback(hObject, eventdata, handles)

function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
set(hObject,’BackgroundColor’,’white’);
end

function edit2_Callback(hObject, eventdata, handles)

function edit2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
set(hObject,’BackgroundColor’,’white’);
end

function pushbutton1_Callback(hObject, eventdata, handles)
global goruntu dosyaAdi
dosyaAdi = imgetfile;
goruntu = double(imread(dosyaAdi))./255;
h = handles.axes1;
axes(h);
imshow(goruntu);

function pushbutton2_Callback(hObject, eventdata, handles)
msgbox(‘Secilen image icin algoritma calistiriliyor… Lutfen bekleyin… ‘,’Dikkat !’,’warn’);
global goruntu dosyaAdi alpha beta phi rho
[goruntuSatir, goruntuSutun] = size(goruntu);
ToplamIterasyonSayisi=str2num(get(handles.edit1, ‘String’));
tic;
goruntuKopyasi = zeros(size(goruntu));
goruntuKopyasi_normal = 0;
for satir =1:goruntuSatir
for sutun=1:goruntuSutun
taslak1 = [satir-2 sutun-1; satir-2 sutun+1; satir-1 sutun-2;
satir-1 sutun-1; satir-1 sutun; satir-1 sutun+1;
satir-1 sutun+2; satir sutun-1];
taslak2 = [satir+2 sutun+1; satir+2 sutun-1; satir+1 sutun+2;
satir+1 sutun+1; satir+1 sutun; satir+1 sutun-1;
satir+1 sutun-2; satir sutun+1];
taslak0 = find(taslak1(:,1)>=1 & taslak1(:,1)<=goruntuSatir & taslak1(:,2)>=1 & taslak1(:,2)<=goruntuSutun & taslak2(:,1)>=1 & taslak2(:,1)<=goruntuSatir & taslak2(:,2)>=1 & taslak2(:,2)<=goruntuSutun);
taslak11 = taslak1(taslak0, :);
taslak22 = taslak2(taslak0, :);
taslak00 = zeros(size(taslak11,1));
for i = 1:size(taslak11,1)
taslak00(i) = abs(goruntu(taslak11(i,1), taslak11(i,2)) – goruntu(taslak22(i,1), taslak22(i,2)));
end
if size(taslak11,1) == 0
goruntuKopyasi(satir, sutun) = 0;
goruntuKopyasi_normal = goruntuKopyasi_normal + goruntuKopyasi(satir, sutun);
else
sigma = 10;
taslak00 = sin(pi .* taslak00./2./sigma);
goruntuKopyasi(satir, sutun) = sum(sum(taslak00.^2));
goruntuKopyasi_normal = goruntuKopyasi_normal + goruntuKopyasi(satir, sutun);
end
end
end
goruntuKopyasi = goruntuKopyasi./goruntuKopyasi_normal;
goruntuKopyasi = goruntuKopyasi.*100;
feromon = 0.0001 .* ones(size(goruntu));
ToplamKarincaSayisi = round(sqrt(goruntuSatir*goruntuSutun));
KarincaninKonumu = zeros(ToplamKarincaSayisi, 2);
rand(‘state’, sum(clock));
geciciToplamKarincaSayisi = rand(ToplamKarincaSayisi, 2);
KarincaninKonumu(:,1) = round(1 + (goruntuSatir-1) * geciciToplamKarincaSayisi(:,1));
KarincaninKonumu(:,2) = round(1 + (goruntuSutun-1) * geciciToplamKarincaSayisi(:,2));
arananYol = ‘8’;
if goruntuSatir*goruntuSutun == 128*128
deger = 40;
elseif goruntuSatir*goruntuSutun == 256*256
deger = 30;
elseif goruntuSatir*goruntuSutun == 512*512
deger = 20;
end
hafizaUzunlugu = round(rand(1).*(1.15*deger-0.85*deger)+0.85*deger);
KarincaHafizasi = zeros(ToplamKarincaSayisi, hafizaUzunlugu);
ToplamAdimSayisi = str2num(get(handles.edit2, ‘String’));
for IterasyonSayisi = 1:ToplamIterasyonSayisi
deltaFeromon = zeros(goruntuSatir, goruntuSutun);
for AdimSayisi = 1:ToplamAdimSayisi
secilenDeltaFeromon = zeros(goruntuSatir, goruntuSutun);
for SecilenKarinca = 1:ToplamKarincaSayisi
SecilenKarincaSatir = KarincaninKonumu(SecilenKarinca,1);
SecilenKarincaSutun = KarincaninKonumu(SecilenKarinca,2);
if arananYol == ‘4’
satir = SecilenKarincaSatir;
sutun = SecilenKarincaSutun;
geciciYolAraliklari = [satir-1 sutun; satir sutun+1;
satir+1 sutun; satir sutun-1];
elseif arananYol == ‘8’
satir = SecilenKarincaSatir;
sutun = SecilenKarincaSutun;
geciciYolAraliklari = [satir-1 sutun-1; satir-1 sutun; satir-1 sutun+1;
satir sutun-1; satir sutun+1; satir+1 sutun-1;
satir+1 sutun; satir+1 sutun+1];
end
geciciToplamKarincaSayisi = find(geciciYolAraliklari(:,1)>=1 & geciciYolAraliklari(:,1)<=goruntuSatir & geciciYolAraliklari(:,2)>=1 & geciciYolAraliklari(:,2)<=goruntuSutun);
yolAraliklari = geciciYolAraliklari(geciciToplamKarincaSayisi, :);
karincaninGecisOlasiligi_v = zeros(size(yolAraliklari,1),1);
karincaninGecisOlasiligi_p = zeros(size(yolAraliklari,1),1);
for i = 1:size(yolAraliklari,1)
geciciToplamKarincaSayisi = (yolAraliklari(i,1)-1)*goruntuSutun + yolAraliklari(i,2);
if length(find(KarincaHafizasi(SecilenKarinca,:)==geciciToplamKarincaSayisi))==0
karincaninGecisOlasiligi_v(i) = goruntuKopyasi(yolAraliklari(i,1), yolAraliklari(i,2));
karincaninGecisOlasiligi_p(i) = feromon(yolAraliklari(i,1), yolAraliklari(i,2));
else
karincaninGecisOlasiligi_v(i) = 0;
karincaninGecisOlasiligi_p(i) = 0;
end
end
if (sum(sum(karincaninGecisOlasiligi_v))==0) | (sum(sum(karincaninGecisOlasiligi_p))==0)
for i = 1:size(yolAraliklari,1)
geciciToplamKarincaSayisi = (yolAraliklari(i,1)-1)*goruntuSutun + yolAraliklari(i,2);
karincaninGecisOlasiligi_v(i) = goruntuKopyasi(yolAraliklari(i,1), yolAraliklari(i,2));
karincaninGecisOlasiligi_p(i) = feromon(yolAraliklari(i,1), yolAraliklari(i,2));
end
end
karincaGecisOlasiligi = (karincaninGecisOlasiligi_v.^alpha) .* (karincaninGecisOlasiligi_p.^beta) ./ (sum(sum((karincaninGecisOlasiligi_v.^alpha) .* (karincaninGecisOlasiligi_p.^beta))));
rand(‘state’, sum(100*clock));
geciciToplamKarincaSayisi = find(cumsum(karincaGecisOlasiligi)>=rand(1), 1);
SiradakiKarincaSatir = yolAraliklari(geciciToplamKarincaSayisi,1);
SiradakiKarincaSutun = yolAraliklari(geciciToplamKarincaSayisi,2);
if length(SiradakiKarincaSatir) == 0
SiradakiKarincaSatir = SecilenKarincaSatir;
SiradakiKarincaSutun = SecilenKarincaSutun;
end
KarincaninKonumu(SecilenKarinca,1) = SiradakiKarincaSatir;
KarincaninKonumu(SecilenKarinca,2) = SiradakiKarincaSutun;
secilenDeltaFeromon(KarincaninKonumu(SecilenKarinca,1), KarincaninKonumu(SecilenKarinca,2)) = 1;
if AdimSayisi <= hafizaUzunlugu
KarincaHafizasi(SecilenKarinca,AdimSayisi) = (KarincaninKonumu(SecilenKarinca,1)-1)*goruntuSutun + KarincaninKonumu(SecilenKarinca,2);
elseif AdimSayisi > hafizaUzunlugu
KarincaHafizasi(SecilenKarinca,:) = circshift(KarincaHafizasi(SecilenKarinca,:),[0 -1]);
KarincaHafizasi(SecilenKarinca,end) = (KarincaninKonumu(SecilenKarinca,1)-1)*goruntuSutun + KarincaninKonumu(SecilenKarinca,2);
end
feromon = ((1-rho).*feromon + rho.*secilenDeltaFeromon.*goruntuKopyasi).*secilenDeltaFeromon + feromon.*(abs(1-secilenDeltaFeromon));
end
deltaFeromon = (deltaFeromon + (secilenDeltaFeromon>0))>0;
feromon = (1-phi).*feromon;
end
end
hesapla = histogramAyarlama(feromon);
set(handles.text6, ‘String’, ‘Image islendi…’);
imwrite(uint8(abs((feromon>=hesapla).*255-255)), gray(256), [dosyaAdi ‘_kkaKenarTespit_.bmp’], ‘bmp’);
goster = handles.axes2;
axes(goster);
imshow([dosyaAdi ‘_kkaKenarTespit_.bmp’]);
set(handles.text11, ‘String’, ‘Toplam sure : ‘);
set(handles.text7, ‘String’, toc);
set(handles.text12, ‘String’, ‘Saniyedir.’);
toc

function gonder = histogramAyarlama(goruntu)
goruntu = goruntu(:);
[sayac, N]=hist(goruntu,256);
i=1;
kumulatif=cumsum(sayac);
T(i)=(sum(N.*sayac))/kumulatif(end);
kumulatif2=cumsum(sayac(N<=T(i)));
MBT=sum(N(N<=T(i)).*sayac(N<=T(i)))/kumulatif2(end);
kumulatif3=cumsum(sayac(N>T(i)));
MAT=sum(N(N>T(i)).*sayac(N>T(i)))/kumulatif3(end);
i=i+1;
T(i)=(MAT+MBT)/2;
Threshold=T(i);
while abs(T(i)-T(i-1))>=1
kumulatif2=cumsum(sayac(N<=T(i)));
MBT=sum(N(N<=T(i)).*sayac(N<=T(i)))/kumulatif2(end);
kumulatif3=cumsum(sayac(N>T(i)));
MAT=sum(N(N>T(i)).*sayac(N>T(i)))/kumulatif3(end);
i=i+1;
T(i)=(MAT+MBT)/2;
Threshold=T(i);
end
gonder = Threshold;

function slider1_Callback(hObject, eventdata, handles)

function slider1_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
set(hObject,’BackgroundColor’,[.9 .9 .9]);
end

function slider2_Callback(hObject, eventdata, handles)
global alpha
alpha = get(hObject,’Value’);
alpha = num2str(alpha);
set(handles.edit3, ‘String’, alpha);

function slider2_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
set(hObject,’BackgroundColor’,[.9 .9 .9]);
end

function slider3_Callback(hObject, eventdata, handles)
global beta
beta = get(hObject,’Value’);
set(handles.edit4, ‘String’, beta);

function slider3_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
set(hObject,’BackgroundColor’,[.9 .9 .9]);
end

function slider4_Callback(hObject, eventdata, handles)
global rho
rho = get(hObject,’Value’);
set(handles.edit5, ‘String’, rho);

function slider4_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
set(hObject,’BackgroundColor’,[.9 .9 .9]);
end

function slider5_Callback(hObject, eventdata, handles)
global phi
phi = get(hObject,’Value’);
set(handles.edit6, ‘String’, phi);

function slider5_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
set(hObject,’BackgroundColor’,[.9 .9 .9]);
end

function edit3_Callback(hObject, eventdata, handles)

function edit3_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
set(hObject,’BackgroundColor’,’white’);
end

function edit4_Callback(hObject, eventdata, handles)

function edit4_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
set(hObject,’BackgroundColor’,’white’);
end

function edit5_Callback(hObject, eventdata, handles)

function edit5_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
set(hObject,’BackgroundColor’,’white’);
end

function edit6_Callback(hObject, eventdata, handles)

function edit6_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
set(hObject,’BackgroundColor’,’white’);
end

function figure1_CreateFcn(hObject, eventdata, handles)

Diger Kenar Tespit Algoritmalarindaki Goruntu Sonuclariyla Kiyaslama

goruntu = imread(‘KameraliAdam.bmp’);
robertFiltresi = edge(goruntu,’roberts’);
prewittFiltresi = edge(goruntu,’prewitt’);
sobelFiltresi = edge(goruntu,’sobel’);
LoGFiltresi = edge(goruntu,’log’);
cannygoruntu = edge(goruntu,’canny’);
figure
subplot(231), imshow(goruntu), title(‘Orjinal Goruntu’)
subplot(232), imshow(robertFiltresi) , title(‘Robert Cross Filtresi’)
subplot(233), imshow(prewittFiltresi), title(‘Prewitt Filtresi’)
subplot(234), imshow(sobelFiltresi), title(‘Sobel Filtresi’)
subplot(235), imshow(LoGFiltresi), title(‘LoG Filtresi’)
subplot(236), imshow(cannygoruntu), title(‘Canny Filtresi’)

Ekran Goruntuleri;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Keyifli Calismalar Dilerim

Etiketler: , , , , , ,
Bulundugu Konu Etiketleri Akademik, Bilgisayarli Gorme / Goruntu Isleme, Genel, Matlab, Yazilim |

Konu Ile Ilgili Yorumlar...

  1. Nano'nun Günlüğü… » Blog Archive » Karinca Koloni Algoritmasi Nedir? Dedi Ki... :
    Şubat 15th, 2014 at 23:32

    […] Karinca Koloni Algoritmasi Ile Kenar Tespit Yontemi […]

Istatistik

  • 1 Uye
  • 334 Yazi
  • 16 Yorum Var