Skip to content

Instantly share code, notes, and snippets.

@bulentsiyah
Last active October 20, 2017 13:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bulentsiyah/7befd61454b2f6f5a863ed6090bc4101 to your computer and use it in GitHub Desktop.
Save bulentsiyah/7befd61454b2f6f5a863ed6090bc4101 to your computer and use it in GitHub Desktop.
Tek Noktalı Yöntem ile Kist Bulma -- http://www.bulentsiyah.com/tek-noktali-ile-kist-bulma-matlab/
% Bülent SİYAH 081503030 Sayısal Görüntü İşleme
% 4.Ödev Tek Noktalı Yöntem ile Kist Bulma (Düzeltildi)
% Rekürsif fonksiyon olmaması nedeniyle kullanılmamıştır.
% Algoritmada adımlar şöyledir.
function tekNoktaliNesneBulma()
%Resim yüklenir.
resimOrjinal = imread('ultra1.png');
%gaussıan filtresinden geçirilir. 5x5 luk maske kullanılmıştır.
hGaussionFiltresi=fspecial('gaussian',5,5);
gaussianFiltresi=imfilter(resimOrjinal,hGaussionFiltresi,'replicate');
% Resim gri tonlara dönüştürülmüştür.
resimGri=rgb2gray(gaussianFiltresi);
% Aşındırma Filtresi uygulanmıştır. Kesinlikler netleşmesi için.
% disk şeklinde ve 5x5 lük maske ile yapılmıştır.
se=strel('disk',5);
resimAsindirma=imerode(resimGri,se);
% Genişletme Filtresi ile aşınmış resimde nesneler daha cok ayrılarak
% kenarlar netleşmiştir. Genişletme için 7x7 lik maske kullanılmıştır.
se=strel('disk',7);
resimGenisletme=imdilate(resimAsindirma,se);
%Ekrandan nokta alma kısmı:
figure(1);
imshow(resimOrjinal);
title('Resimde Kistin Bulunduğu Yerden Tek Nokta Seçiniz');
%Noktanın sayısı,yeri ve değerinin aldığı kısım:
[x,y]=ginput(1);
noktaX=uint32(x);
noktaY=uint32(y);
%Resim üzerinde satır, sütun şeklinde noktanın yerine bakılır. Bu yüzden
%Y,X şeklinde değeri yerleştirildi.
noktaDegeri=resimGenisletme(noktaY,noktaX);
%formul işlemlerinde kullanılması için double tipine dönüştürlür.
noktaDegeri=double(noktaDegeri);
% Alınan noktaya göre eşik değer belirlenicek böylece resmin içindeki
% nesneler ayrılmış olucak. Eğer ortalama esik değer kullanılırsa bu
% nesneler için ayrıt edici olmaz. Bunun dışında resme uygulanan filtreler
% ile birbirine yakın tondaki nesneler ile bir birine bitişik olan ayrı
% nesneler birbirinden ayrıldı. Böylece alınan noktaya ait nesne belirleme
% imkanı oluştu.
esikdegerNormal = graythresh(resimGenisletme);
% esikdegerNormal değişkeni tüm resmin eşik değerini gösteriyor.
% noktaDegeri değişkeni ise noktanın değerini gösteriyor. Burada
% noktanın değerinin 256 oranı noktanın eşik değerini verecektir.
% Bunun için formül=(normal eşik değer+ 2* noktanındeğeri/256)/3 böylece
% seçilen nokta ile genel eşik değerinin arasında ve seçilen noktaya daha
% yakın bir değerle alınarak resim siyah beyaz logical değerlere dönüştürülecek.
formul=(esikdegerNormal+2*(noktaDegeri/256) )/3;
resimSiyahbeyaz=im2bw(resimGenisletme,formul);
%Resim siyah beyaza dönüştürüldükten sonra bwlabel ile nesneler ayırt
%edilecek. Bunu yapabilmek için resmin siyah arkaplan beyaz zemin üzerine
%olması gerekir. Bu yüzden dönüştürülüyor.
resimSiyahbeyaz=~(resimSiyahbeyaz);
% bwlabel resmin yanındaki ikinci parametre 4 veya 8 dışında bir değer
% olamaz bu komşuluklarına göre düzenlediği için hassasiyeti belirler.
etiketlenmisNesneler = bwlabel(resimSiyahbeyaz,4);
% Seçilen nokta etiketlenme işlemi sonrası hangi değere sahip olduğuna
% bakılır.
noktaEtiketDegeri=etiketlenmisNesneler(noktaY,noktaX);
% Seçilen noktanın etiket değeri dışındakileri yok edilir.
etiketlenmisNesneler(find(etiketlenmisNesneler~=noktaEtiketDegeri))=0;
% Nesnenin kenarları bulunup çizilerek gösterilme komutları:
figure(2);
% Ekranda iki resim görüntülenip solda orjinal hali, sağda nesnenin
% etiketli hali gösterilir.
subplot(1,2,1);
imshow(resimOrjinal);
title('Resmin Orjinali');
subplot(1,2,2);
imshow(resimOrjinal);
title('Tek Noktalı Yöntem ile Nesnenin Yeri');
nesneninCevresi = bwboundaries(etiketlenmisNesneler,'noholes');
hold on
nesnem = nesneninCevresi{1};
plot(nesnem(:,2), nesnem(:,1), 'r', 'LineWidth', 2);
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment