Last active
October 20, 2017 13:23
-
-
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/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% 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