Nano'nun Günlüğü…

Ideallerimi gerceklestirmek icin arastiriyorum, Unutmamak icin yaziyorum!

  • Bulundugunuz Sayfa: 
  • Ana Sayfa
  • Canny Algoritmasi

Canny Algoritmasi

Gönderim Aralık 5th, 2013

Makalede, var olan bir image uzerinde bilgisayarli gorme – goruntu isleme konularindan Canny Algoritmasini adim adim calistiricaz. Ayni zamanda algoritme uzerinde; Gaussian, Hysteresis thershold, Non-maxima suppressed ve Gradient yontemlerinin nasil kullanildigi matlab kodlariyla destekliyor olucam.

Varolan armutlu.jpg image’i icin;

 

 

 

 

 

 

 

 

 

Asagidaki ilgili Canny Algoritmasi ile birlikte elimizdeki image goruntusunun kenarlarini bulalim;

Yapmis oldugumuz islemler su sirasiyla su sekildedir; elimizdeki goruntunun oncelikle image’imizi imread ile okutup bunu rgb2gray ile boyutunu azaltmis oluyorum sonrasinda double islemine donusturuyorum. Gaussian ve Hysteresis degerleri icin degiskenler atamalarini gerceklestiriyorum. Image’in konvulasyon degerleri icin gassuian sigma degerini belirleyerek ekrana sigma degerine gore gaussian filtrelemesini bastiriyoruz. Image’in pixel degerleri sayesinde tahmini koseleri belirleyebilmek icin normal yon hesaplaniyor. Buldugumuz pixellere gore yonleri ayiriyoruz. Gradyant yontemi ile bulmus oldugumuz kenarlarin zayif kenar noktalarini non-maxima suppression yontemi ile basitiyoruz. En son olarak Hysteresis thersholding yani ikili esik yontemini kullanarak alt ve ust esiklere gore sonuclari ekrana bastirmis oluyoruz. Matlab kodu ve ekran goruntuleri asagida bulunmaktadir.

Matlab Kodu;

clear all;
close all;
clc; clf;

filtreOlcusu = 5;
sigma = 14;
dusukEsikDegeri = 0.1;
yuksekEsikDegeri = 0.3;

image = rgb2gray(imread(‘armutlu.jpg’));
image = double(image);
figure(1), imshow(image, []), title(‘Orjinal Image’);

gaussian_filtreleme = fspecial(‘gaussian’, filtreOlcusu, sigma);
convulationImage = conv2(image, gaussian_filtreleme, ‘same’);
figure (2), imshow(convulationImage, []), title([‘Gaussian Filterleme sonucu \sigma = ‘, num2str(sigma)]);

[gaussian_filtreleme_x gaussian_filtreleme_y] = gradient(gaussian_filtreleme);
image_gradient_x = conv2(convulationImage, gaussian_filtreleme_x, ‘same’);
image_gradient_y = conv2(convulationImage, gaussian_filtreleme_y, ‘same’);

normalYon = atan2(image_gradient_y, image_gradient_x);
normalYon = normalYon*180/pi;
normalYon_dis = zeros(512, 512);

for i = 1  : 512
for j = 1 : 512
if ((normalYon(i, j) > 0 ) && (normalYon(i, j) < 22.5) || (normalYon(i, j) > 157.5) && (normalYon(i, j) < -157.5))
normalYon_dis(i, j) = 0;
end
if ((normalYon(i, j) > 22.5) && (normalYon(i, j) < 67.5) || (normalYon(i, j) < -112.5) && (normalYon(i, j) > -157.5))
normalYon_dis(i, j) = 45;
end
if ((normalYon(i, j) > 67.5 && normalYon(i, j) < 112.5) || (normalYon(i, j) < -67.5 && normalYon(i, j) > 112.5))
normalYon_dis(i, j) = 90;
end
if ((normalYon(i, j) > 112.5 && normalYon(i, j) <= 157.5) || (normalYon(i, j) < -22.5 && normalYon(i, j) > -67.5))
normalYon_dis(i, j) = 135;
end
end
end

figure(3), imshow(image_gradient_x), title(‘X Gradyan’);
figure(4), imshow(image_gradient_y), title(‘Y Gradyan’);
figure(5), imagesc(normalYon_dis); colorbar, title(‘Normal Yon’);
imageGradientMagnitude = sqrt(image_gradient_x.^2 + image_gradient_y.^2);
figure(6), imshow(imageGradientMagnitude, []), title(‘Gradyan Buyuklugu’);

imageSupressed = zeros(512, 512);
for i = 2  : 511
for j = 2 : 511
if (normalYon_dis(i, j) == 0)
if (imageGradientMagnitude(i, j) > imageGradientMagnitude(i, j – 1) && imageGradientMagnitude(i, j) > imageGradientMagnitude(i, j + 1))
imageSupressed(i, j) = imageGradientMagnitude(i, j);
else
imageSupressed(i, j) = 0;
end
end

if (normalYon_dis(i, j) == 45)
if (imageGradientMagnitude(i, j) > imageGradientMagnitude(i + 1, j – 1) && imageGradientMagnitude(i, j) > imageGradientMagnitude(i – 1, j + 1))
imageSupressed(i, j) = imageGradientMagnitude(i, j);
else
imageSupressed(i, j) = 0;
end
end

if (normalYon_dis(i, j) == 90)
if (imageGradientMagnitude(i, j) > imageGradientMagnitude(i – 1, j) && imageGradientMagnitude(i, j) > imageGradientMagnitude(i + 1, j))
imageSupressed(i, j) = imageGradientMagnitude(i, j);
else
imageSupressed(i, j) = 0;
end
end

if (normalYon_dis(i, j) == 135)
if (imageGradientMagnitude(i, j) > imageGradientMagnitude(i – 1, j – 1) && imageGradientMagnitude(i, j) > imageGradientMagnitude(i + 1, j + 1))
imageSupressed(i, j) = imageGradientMagnitude(i, j);
else
imageSupressed(i, j) = 0;
end
end
end
end
figure(7), imshow(imageSupressed), title(‘Image Non-Maximal Suppression’);

thersholdDusukDegeri = dusukEsikDegeri * max(max(imageSupressed));
thersholdYuksekDegeri = yuksekEsikDegeri * max(max(imageSupressed));

imageThreshold = zeros(512, 512);

for i = 1  : 512
for j = 1 : 512
if (imageSupressed(i, j) < thersholdDusukDegeri)
imageThreshold(i, j) = 0;
elseif (imageSupressed(i, j) > thersholdYuksekDegeri)
imageThreshold(i, j) = 1;
else
if ((imageSupressed(i + 1, j) > thersholdYuksekDegeri) || (imageSupressed(i – 1, j) > thersholdYuksekDegeri) || (imageSupressed(i, j + 1) > thersholdYuksekDegeri) || (imageSupressed(i, j – 1) > thersholdYuksekDegeri))
imageThreshold(i, j) = 1;
end
end
end
end
figure(8), imshow(imageThreshold), title(‘Hysteresis Thresholding’);

Ekran Goruntuleri

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Keyifli Calismalar Dilerim.

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

Lutfen Yorumlarinizi Burdan Ulastiriniz!...

You must be Kullanici Adiniz : to post a comment.

Istatistik

  • 1 Uye
  • 334 Yazi
  • 16 Yorum Var