Professional Documents
Culture Documents
s04 Taslak
s04 Taslak
Örneğin
hesaplamaları yapılmaktadır.
Bağlantılı Bileşenler (Connected Component)
ve Etiketleme (Labeling)
Bağlantılı Bileşenler ve Etiketleme
bb1 bb2
bb3 bb4
ön plan bb
arka plan bb
Bağlantılı Bileşenler ve Etiketleme
Bu işlem için
• Görüntüdeki tüm pikseller incelenir
• Bağlantılı bileşene rastlandığında etiketlenmemiş
piksellere aynı etiket değeri atanır
Bağlantılı Bileşenler ve Etiketleme
Algoritma
Etiket= 1
Eğer piksel etiketi=0
Eğer piksel bağlantılı bileşene ait ise onunla aynı
etiketi ata değilse
Etiket=Etiket+1
piksele Etiketi ata
Bağlantılı Bileşenler ve Etiketleme
1 1
1 1
1 1
1
Bağlantılı Bileşenler ve Etiketleme
2 2 2 2
2 2 2
2 2
2 2
2 2
Bağlantılı Bileşenler ve Etiketleme
3
Bağlantılı Bileşenler ve Etiketleme
4
Bağlantılı Bileşenler ve Etiketleme
Pixel a[i, j]
Geometrik Özellikler
Average in x
Average in y
Geometrik Özellikler
Örnek :
1 2 3 4 5 6 7 8 9 10 11 12 13
1 2 3 4 5 6 7 8 9 10 11 12 13
Geometrik Özellikler
Oryantasyon
Adım 1: a,b,c katsayılarını hesapla
• Dağılımın (B(i,j)) merkezi:
• Olmak üzere
İlgili fonksiyonlar:
CC = bwconncomp(BW)
CC = bwconncomp(BW,conn)
BW : SB görüntü
Conn: 4 veya 8 komşuluk türü
MATLAB da bağlantılı bileşen analizi
Bwlabel fonksiyonu:
İkili görüntüde b.b. etiketleme işlemi yaparak etiketli
görüntüyü döndürür.
L = bwlabel(BW)
L = bwlabel(BW,n)
[L,num] = bwlabel(___)
BW:İkili görüntü
N: komşuluk 4, 8 (default)
Num : bulunan b.b. Sayısı
MATLAB da bağlantılı bileşen analizi
Label2rgb fonksiyonu:
Etiketleri görselleştirme amacıyla renklendirme işlemi
yapar.
RGB = label2rgb(L)
RGB = label2rgb(L, map)
RGB = label2rgb(L, map, zerocolor)
RGB = label2rgb(L, map, zerocolor, order)
Bwselect fonksiyonu
İkili görüntüde obje seçme işlemi yapar ve seçilen
objeleri içeren görüntüyü döndürür.
BW2 = bwselect(BW,c,r,n)
BW2 = bwselect(BW,n)
[BW2, idx] = bwselect(___)
BW2 = bwselect(x,y,BW,xi,yi,n)
[x,y,BW2,idx,xi,yi] = bwselect(___)
stats = regionprops(BW,properties)
stats = regionprops(CC,properties)
stats = regionprops(L,properties)
stats = regionprops(___,I,properties)
stats = regionprops(output,___)
'Area'
'BoundingBox'
'Centroid'
'Eccentricity'
'EulerNumber'
'Orientation'
....
MATLAB da bağlantılı bileşen analizi
Örnekler
MATLAB da bağlantılı bileşen analizi
im=[0 0 1 1 1 0 0 0 0 0;
0 0 0 1 0 0 0 1 1 1;
0 0 1 1 1 1 0 0 1 1;
0 0 1 1 1 0 0 1 1 1;
0 0 1 1 0 0 0 1 1 0;
0 0 0 0 0 0 0 0 0 0;
0 0 0 1 1 1 1 1 0 0;
0 0 0 0 1 1 1 1 0 0;
0 0 0 0 1 1 1 1 0 0;
0 0 0 0 0 1 1 1 0 0];
concomp=bwconncomp(im);
MATLAB da bağlantılı bileşen analizi
concomp =
Connectivity: 8
ImageSize: [10 10]
NumObjects: 3
PixelIdxList: {1x3 cell}
MATLAB da bağlantılı bileşen analizi
im=[0 0 1 1 1 0 0 0 0 0;
0 0 0 1 0 0 0 1 1 1;
0 0 1 1 1 1 0 0 1 1;
0 0 1 1 1 0 0 1 1 1;
0 0 1 1 0 0 0 1 1 0;
0 0 0 0 0 0 0 0 0 0;
0 0 0 1 1 1 1 1 0 0;
0 0 0 0 1 1 1 1 0 0;
0 0 0 0 1 1 1 1 0 0;
0 0 0 0 0 1 1 1 0 0];
concomp=bwconncomp(im,4);
MATLAB da bağlantılı bileşen analizi
concomp =
Connectivity: 4
ImageSize: [10 10]
NumObjects: 3
PixelIdxList: {1x3 cell}
MATLAB da bağlantılı bileşen analizi
etiket_im=bwlabel(im,4);
analiz=regionprops(concomp,'Area','Centroid');
analiz.Area
analiz.Centroid
%Alanı 11 pikselden küçük olanları sil
etiket = find([analiz.Area] < 11);
im(etiket_im==etiket)=0
MATLAB da bağlantılı bileşen analizi
im =
0 0 1 1 1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0
0 0 1 1 1 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 1 0 0
0 0 0 0 1 1 1 1 0 0
0 0 0 0 1 1 1 1 0 0
0 0 0 0 0 1 1 1 0 0
MATLAB da bağlantılı bileşen analizi
im=imread('artilar.gif');
imshow(im,[]);
concomp=bwconncomp(im,4) % izole piksele dikkat
pause
concomp=bwconncomp(im,8)
pause
etiket_im=bwlabel(im,4);
rgbetiket=label2rgb(etiket_im);
imshow(im,[]);
figure,
imshow(etiket_im,[]);
figure,
imshow(rgbetiket,[]);
MATLAB da bağlantılı bileşen analizi
analiz=regionprops(concomp,'Area','Centroid');
analiz.Area
analiz.Centroid;
close all
centroids=cat(1,analiz.Centroid);
imshow(im,[]);
hold on
plot(centroids(:,1),centroids(:,2), 'b*');
hold off
MATLAB da bağlantılı bileşen analizi
alanlar=cat(1,analiz.Area);
max_alan=max(alanlar)
index=find(max_alan==alanlar)
im(etiket_im~=index)=0;
imshow(im,[]);
analiz=regionprops(im,'Orientation','Area')
A=analiz.Area;
B=analiz.Orientation;
title(sprintf('Alan: %d Oryantasyon : %d',A,B));
MATLAB da bağlantılı bileşen analizi
Görüntü Bölütleme
Görüntü Bölütleme
123 122 78 85 1 1 0 0
128 132 135 76 1 1 1 0
133 129 122 79
1 1 1 0
120 60 85 83
1 0 0 0
Orijinal görüntü Eşikleme yoluyla bölütlenmiş görüntü
Eşikleme (Thresholding)
123 122 78 85
128 132 85 76 1
133 129 122 79
120 60 85 83
123 122 78 85
128 132 85 76 1 0
133 129 122 79
120 60 85 83
0 𝑒ğ𝑒𝑟 𝑓 𝑥, 𝑦 > 𝑇!
𝑔 𝑥, 𝑦 = 1 𝑒ğ𝑒𝑟 𝑇" ≤ 𝑓 𝑥, 𝑦 ≤ 𝑇!
0 𝑒ğ𝑒𝑟 𝑓 𝑥, 𝑦 < 𝑇"
Eşikleme (Thresholding)
MATLAB ile bölgesel bölütleme işlemleri
Eşikleme
MATLAB ile bölgesel bölütleme işlemleri
I = imread('coins.png');
imhist(I);
MATLAB ile bölgesel bölütleme işlemleri
I = imread('coins.png');
imhist(I,50)
MATLAB ile bölgesel bölütleme işlemleri
I = imread('coins.png');
histo=imhist(I);
plot(histo);
MATLAB ile bölgesel bölütleme işlemleri
Örnek:
I = imread('coins.png');
imhist(I);
im2=(I>100);
imshow(im2,[]);
MATLAB ile bölgesel bölütleme işlemleri
i=imread('siseler.png')
i=rgb2gray(i);
imshow(i)
figure
imhist(i)
im2=((i>50));
imshow(im2,[]);
MATLAB ile bölgesel bölütleme işlemleri
i=imread('siseler.png')
i=rgb2gray(i);
imshow(i)
figure
imhist(i)
im2=((i>50)&(i<160));
imshow(im2,[]);
MATLAB ile bölgesel bölütleme işlemleri
i=imread('siseler.png')
i=rgb2gray(i);
imshow(i)
figure
imhist(i)
im2=((i>50)&(i<190));
imshow(im2,[]);
MATLAB ile bölgesel bölütleme işlemleri
level = graythresh(I)
Kullanımı :
Örnek:
I = imread('coins.png');
level = graythresh(I);
BW = im2bw(I,level);
imshow(BW);
%level= 0.4941
Gerçek eşik değerini elde etmek için
esik= level*255;
%esik=126;
BW2=(I>esik);
figure
imshow(BW2);
Eşikleme (Thresholding)
Kullanımı şu şekildedir.
Kullanımı şu şekildedir
quant_A = imquantize(A,levels)
i=imread('siseler.png');
i=rgb2gray(i);
imshow(i)
figure, imhist(i)
esik=multithresh(i);
% imquantize ile bölütleme
BW1=imquantize(i,esik);
esik2=multithresh(i,2);
BW2=imquantize(i,esik2);
imshow(BW1,[]);
figure, imshow(BW2,[]);
% klasik yoldan
BW3=(i>esik2(1))&(i<esik2(2));
figure, imshow(BW3,[]);
Eşikleme (Thresholding)
T = otsuthresh(counts)
[T EM] = otsuthresh(counts)
I = imread('coins.png');
[counts,x] = imhist(I,16);
stem(x,counts)
T = otsuthresh(counts);
BW = im2bw(I,T);
figure
imshow(BW)
Eşikleme (Thresholding)
T = adaptthresh(I)
T = adaptthresh(I,sensitivity)
Eşikleme (Thresholding)
I = imread('rice.png');
T = adaptthresh(I, 0.4);
BW = imbinarize(I,T);
figure
imshowpair(I, BW, 'montage')
MATLAB ile kendi adaptif eşikleme
kodumuzu yazalım
Eşikleme (Thresholding)
Ipad=padarray(I,[win_size win_size],'symmetric');
Eşikleme (Thresholding)
Örnek kod: Kendi adaptif eşikleme kodumuzu yazalım
I = imread('rice.png');
[m n]=size(I);
BW2=zeros(m,n);
win_size=2*floor(m/16)+1;
Ipad=padarray(I,[win_size win_size],'symmetric');
i2=1;
for i=1:m
j2=1;
for j=1:n
wind=Ipad(i:i+2*win_size,j:j+2*win_size);
ort=mean(mean(wind));
if (I(i,j)>=ort) BW2(i2,j2)=1;
end
j2=j2+1;
end
i2=i2+1;
end
figure, imshow(BW2,[]);
Eşikleme (Thresholding)
Kodlar:
close all
clear all
Clc
dolum_sivi_miktari=36000;
i=imread('siseler2.png');
i=rgb2gray(i);
figure, imshow(i,[]);
i=padarray(i,[3 0],'post');
figure, imshow(i,[]);
Eşikleme (Thresholding)
Kodlar – devam:
esik=multithresh(i,2);
% klasik yoldan
BW=(i>esik(1))&(i<esik(2));
figure, imshow(BW,[]);
ye=strel('disk',3);
BW_opened=imopen(BW,ye);
BW_closed=imclose(BW_opened,ye);
BW_closed = imclearborder(BW_closed, 4);
figure, imshow(BW_closed,[]);
Eşikleme (Thresholding)
Kodlar – devam:
BW_etiket=bwlabel(BW_closed);
concomp=bwconncomp(BW_closed);
Analiz=regionprops(concomp,'Area');
Alanlar=cat(1,Analiz.Area);
index=find(Alanlar<dolum_sivi_miktari);
template=uint8(zeros(size(BW_closed)));
Eşikleme (Thresholding)
Kodlar – devam:
if (sum(index)>0)
[in_count c]=size(index);
for j=1:in_count
template(BW_etiket==index(j))=1;
end
i2=i.*template;
irgb=i-i2;
irgb(:,:,2)=i-i2;
irgb(:,:,3)=i2;
figure, imshow(irgb,[]);
title(sprintf('%d adet hatalı şişe var',in_count));
else
figure, imshow(i,[]);
title('hatalı şişe yok');
end
Renkli Görüntülerde Eşikleme
Renkli Görüntülerde Eşikleme
Renkli görüntüler de gri tonlu görüntülere benzer şekilde, her
kanal ayrı ayrı eşiklenerek istenilen ön plan nesneleri
bölütlenebilir.
Renkli Görüntülerde Eşikleme
i=imread('peppers.png');
imshow(i);
ir=i(:,:,1);
ig=i(:,:,2);
ib=i(:,:,3);
ir((ir>40)&(ir<148))=0;
ig((ig>15)&(ig<99))=0;
ib((ib>30)&(ib<175))=0;
i(:,:,1)=ir;
i(:,:,2)=ig;
i(:,:,3)=ib;
imshow(i);