You are on page 1of 116

Görüntü İşleme

İkili Görüntülerde Analiz İşlemleri


Görüntü Bölütleme

MÜH4002 Görüntü İşleme


Kırıkkale Üniversitesi
Elektrik – Elektronik Mühendisliği

Dr. Hüseyin AYDİLEK


Kırıkkale, Mart 2023
İkili görüntülerde analiz
Bağlantılı Bileşenler (Connected Component)
ve Etiketleme (Labeling)
İkili görüntülerde analiz

İkili (siyah/beyaz) görüntüler birçok görüntü analiz


algoritmasının temelini teşkil eden görüntülerdir
ve analiz işlemi bu seviyeden başlar.

Örneğin

MRI görüntülerinde beyin tümörlerinin


alanlarının/hacimlerinin ve konumlarının otomatik
bir şekilde hesaplanabilmesi için görüntünün
bölütlenmesi ve ikili görüntü bazında ele alınarak
tümörün işlenmesi gerekir.
İkili görüntülerde analiz
İkili görüntülerde analiz

Hareket eden bir cismin kamera tarafından


otomatik takip edilmesi düşünüldüğünde:

Görüntüdeki hareketli (değişen) piksellerin


belirlenmesi için bölütleme yöntemi ve ardından

Hareketli alana ait centroid (ağırlık merkezi)


hesabının yapılabilmesi için ilgili bölüm ikili
görüntü olarak işlenmelidir.
İkili görüntülerde analiz
İkili görüntülerde analiz

Bu tür analiz işlemlerinin yapılabilmesi için ikili


görüntülerde

• Bağlantılı Bileşenler (Connected Components)


• Konum (Centroid)
• Alan (Area)
• Oryantasyon

hesaplamaları yapılmaktadır.
Bağlantılı Bileşenler (Connected Component)
ve Etiketleme (Labeling)
Bağlantılı Bileşenler ve Etiketleme

• Herhangi bir piksel kümesi eğer bir sınır tarafından


ayrılmıyorsa bitişik olarak isimlendirilir.
•Bitişik piksellerin her bir en büyük bölgesi bağlantılı
bileşen (connected component) olarak isimlendirilir.

• Bağlantılı bileşenlerin kümesi imajı bölgelere


(segmentlere) ayırır.

• Imaj bölütleme birçok görüntü işleme


uygulamasında yararlı bir işlemdir.
Bağlantılı Bileşenler ve Etiketleme
Piksel kümesinin b.b. Olup olmaması tamamen komşuluk
ilişkisi ile tanımlanır. Aşağıdaki ikili görüntüyü
incelediğimizde: (1: ön plan nesneleri 0: arka plan
nesnelerini ifade etsin)

bb1 bb2

bb3 bb4

N4 için 2 adet ön plan bb, 2 adet arka plan bb vardır


Bağlantılı Bileşenler ve Etiketleme

N8 için 1 adet ön plan bb, 1 adet arka plan bb vardır

ön plan bb

arka plan bb
Bağlantılı Bileşenler ve Etiketleme

Bağlantılı bileşenlerin analizi için etiketlenmesi


gerekmektedir. (connected component extraction)

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

Algoritmayı aşağıdaki bw imgede inceleyelim


Bağlantılı Bileşenler ve Etiketleme

Etiket = 1 Etiketlenmiş görüntü

1 1

1 1

1 1

1
Bağlantılı Bileşenler ve Etiketleme

Etiket = 2 Etiketlenmiş görüntü

2 2 2 2

2 2 2

2 2

2 2

2 2
Bağlantılı Bileşenler ve Etiketleme

Etiket = 3 Etiketlenmiş görüntü

3
Bağlantılı Bileşenler ve Etiketleme

Etiket = 4 Etiketlenmiş görüntü

4
Bağlantılı Bileşenler ve Etiketleme

Başka bir etiketleme örneği


Geometrik Özellikler
Alan, Konum, Oryantasyon
Geometrik Özellikler

• Görüntü satır ve sütunlarını düşünürsek

Pixel a[i, j]
Geometrik Özellikler

Görüntü üzerinde piksellere ait bölümlerin


• Alan (Area)
• Konum (Centroid)
• Oryantasyon (Orientation)

Özelliklerini satır ve sütun bilgilerini kullanarak


hesaplamak mümkündür
Geometrik Özellikler

m x n boyutunda ikili görüntü için :

• Alan (area) A : zero-order moment


Total size is number of
black dots

• Konum : the center of area

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

• Çizgi uydurmak için,

Adım 2: açıyı ve çizgi oryantasyonunu hesapla.


MATLAB da bağlantılı bileşen analizi
MATLAB da bağlantılı bileşen analizi

İlgili fonksiyonlar:

Bwlabel : ikili görüntüde b.b. etiketleme işlemi


Label2rgb : Etiketleri görselleştirme amacıyla
renklendirme işlemi.

Bwselect : İkili görüntüde obje seçme işlemi


Bwconncomp: ikili görüntüde b.b. Analizi işlemi
Regionprops: Geometrik ve istatistiksel özellikler
MATLAB da bağlantılı bileşen analizi

Bwconncomp fonksiyonu ile görüntüdeki bağlantılı


bileşenler bulunabilmektedir.

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)

L: etiketlenmiş imge matrisi


Map: renk haritası (jet vs)
Zerocolor: etiketi 0 olan alanın rengini seçer
Order: renkler numaraya göre atanır veya atanmaz
MATLAB da bağlantılı bileşen analizi

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(___)

Bw: ikili görüntü.


C: Sütun
R: satır
MATLAB da bağlantılı bileşen analizi

Regionprops: B.B lerin geometrik ve istatistiksel


özelliklerini sunar

stats = regionprops(BW,properties)
stats = regionprops(CC,properties)
stats = regionprops(L,properties)
stats = regionprops(___,I,properties)
stats = regionprops(output,___)

Bw: ikili görüntü


CC: b.b. Görüntüsü (bwconcomp çıktısı)
L: etiketli görüntü
MATLAB da bağlantılı bileşen analizi

Regionprops: B.B lerin geometrik ve istatistiksel


özelliklerini sunar
Properties: Aşağıdaki değerler olabilir:

'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

Örnek uygulama olarak aşağıdaki görüntüdeki


bileşenlerden en büyük alana sahip olanı belirleyelim ve
diğerlerini resimden silelim ve kalan bileşenin alanını ve
oryantasyon açısını belirleyelim.
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

%en büyük alana sahip olanları filtrele

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

Görüntü bölütleme, görüntü analizi ile ilgili bir


problem olup görüntü işlemenin gösterim ve tanılama
aşamalarına görüntüyü hazırlama işlemidir.

Bu anlamda görüntü bölütleme, bir görüntüyü her biri


içerisinde farklı özelliklerin tutulduğu anlamlı bölgelere
ayırmak olarak tarif edilebilir.

Bu özellikler örneğin, görüntü içerisindeki benzer


parlaklıklar olabilir ve bu parlaklıklar ilgili
görüntünün farklı bölgelerindeki nesneleri temsil
edebilir.
Görüntü Bölütleme

Görüntü içerisinde aynı parlaklıklara sahip nesne


parçacıklarının belirlenmesi, sınıflandırma ve tanılama
amacı için kullanılabilir.

Tüm görüntülere uygulanabilecek genel (universal) bir


bölütleme yöntemi yoktur ve hiçbir bölütleme yöntemi
mükemmel değildir.

Başka bir deyişle, görüntü iyileştirme ve onarma


problemlerinde olduğu gibi görüntü bölütleme için
tasarlanan yöntemler ve bu yöntemlerin başarımları,
görüntüden görüntüye ve uygulamaya dayalı olarak
değişiklik arz eder.
Görüntü Bölütleme

Görüntü bölütleme teknikleri çok olmakla birlikte en sık


kullanılan yöntemler aşağıdakilerdir:
1. Bölge bölütleme
• Eşikleme (Thresholding)
• Bölge Büyütme (Region Growing)
• Bölge ayırma ve birleştirme (Region splitting and
merging)
• Öbekleme (Clustering)

2. Ayrıt bölütleme (Edge detection)


3. Bunlar dışında doku bölütleme (texture
segmentation), hareket bölütleme (motion
segmentation) vb.. gibi özel yöntemler de vardır.
Görüntü Bölütleme
Görüntü Bölütleme
Görüntü Bölütleme
Görüntü Bölütleme
Bölge bölütleme
Eşikleme (Thresholding)
Eşikleme (Thresholding)

Eşikleme, görüntü bölütleme amacıyla kullanılan en


önemli yaklaşımlardan birisidir.

Eşikleme işleminde amaç, görüntü içerisindeki nesneleri


görüntü arka planından ayırmaktır.

Eşikleme için, görüntüdeki gri seviye dağılımlarını


gösteren görüntü histogramından faydalanılır.

Örneğin,koyu bir arka plan üzerinde açık renkli


nesnelerden oluşan f(i, j) görüntüsüne ilişkin gri seviye
histogramı şekildeki gibi olacaktır.
Eşikleme (Thresholding)
Eşikleme (Thresholding)

Bu histograma göre, nesnelere ve arka plana ait pikseller


olmak üzere, görüntüyü iki ana grupta değerlendirmek
mümkündür.

Bu durumda nesneleri arka plandan ayırmak için en


kolay yol, histogramdan göreceli olarak belirlenen bir T
eşik değeri ile görüntüdeki piksel değerlerini
karşılaştırmak olacaktır.
Eşikleme (Thresholding)

Buna göre, görüntüdeki herhangi bir (i, j) pikseli için; f(i,


j) > T ise (i, j) pikseli nesneye ait bir nokta, f(i,j) ≤ T ise
(i, j) pikseli arka plana ait bir nokta olacaktır.

Diğer taraftan, görüntüye ilişkin histogram şekildeki


gibi ikisi nesneye biri de arka plana ait olmak üzere üç gri
seviye grubundan oluşabilir.
Eşikleme (Thresholding)

Eşiklenmiş bir g(x,y) görüntüsü aşağıdaki gibi tanımlanır:


Eşikleme (Thresholding)

Buna göre, 1 ile etiketlenen pikseller nesneye, 0 ile


etiketlenenler ise arka plana karşı düşer.

Eğer ki T sadece f(x,y)’ye bağlı ise bu durumda eşik


değeri bütünsel (global) eşik olarak adlandırılır.

Eğer T hem f(x,y) hem de p(x,y)’ye bağlı ise bu


durumda belirlenen eşik değeri bölgesel (local) eşik
olarak adlandırılır.

Buna ek olarak, Eğer T, x ve y uzaysal koordinatlarına


bağlı ise bu durumda belirlenen eşik değeri dinamik eşik
olarak adlandırılır.
Eşikleme (Thresholding)

İmaj üzerinde eşikleme işlemi: T=100 olsun


123>T olduğundan sonuç 1

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)

Eşik değerinin belirlenmesi önemlidir ve hatalı sonuçlara


yol açabilir. Altta iyi bir eşikleme örneği görülmektedir.

Original Image Thresholded Image


Eşikleme (Thresholding)

• Eşiğin gereğinden düşük veya yüksek olması

Threshold Too Low Threshold Too High


Eşikleme (Thresholding)
Eşikleme (Thresholding)

Global eşikleme yönteminde optimal T değeri şu şekilde


belirlenir:

1. T için başlangıç değeri seçilir (tipik olarak imajın


ortalama gri ton seviyesi)
2. Histogram bu T değeri ile eşiklenir (2 ye ayrılır) :G1
eşik üzeri piksellerin grubu ( >T) G2 eşik altındaki
piksellerin grubu (≤ T)
3. G1 ve G2 nin ortalama gri ton değerlerini hesapla (μ1
ve μ2)
4. Yeni bir eşik değeri belirle µ +µ
T= 1 2
2
Eşikleme (Thresholding)

5. Ardışık T değerleri arasındaki fark belirli bir değerden


küçük olana kadar 2-4 adımlarını tekrar et

Bu yöntem uygun histogramlara uygulandığında oldukça


iyi sonuç vermektedir.

Optimal eşikleme yöntemi olarak da bilinir.


Eşikleme (Thresholding)

Bu yöntemin gelişmiş versiyonu, sınıf içi varyans


değerlerinin minimizasyonu tekniğine dayanan OTSU
yöntemidir.
Eşikleme (Thresholding)
Eşikleme (Thresholding)
Eşikleme (Thresholding)

Global eşikleme 2 adet baskın dağılımın olduğu


(bimodal) histograma sahip görüntülerde iyi sonuç
vermektedir.

Diğer türlü görüntüler (multimodal) ise daha fazla eşik


değerine ihtiyaç duyarlar.
Eşikleme (Thresholding)
Adaptif Eşikleme: Özellikle ışıklandırmadan kaynaklanan
bozulmalar global eşikleme için oldukça büyük problem
çıkarır.
Eşikleme (Thresholding)

Adaptif Eşikleme görüntünün küçük bölgelere ayrılarak


eşik değerinin lokal olarak seçilmesi yöntemine
dayanmaktadır.
Eşikleme (Thresholding)

Piksel değerleri, belirli bir komşuluk içinde değerlendirilir


ve eğer komşuluğun ortalama gri seviyesi üzerinde ise 1,
değilse 0 olarak atanır. 3x3 lokal pencere (kernel) için:

Yerel ort= (123+122+78+128+132+85+133+129+122)/9 = 116.8

123 122 78 85
128 132 85 76 1
133 129 122 79
120 60 85 83

132 > 116.8 olduğundan sonuç 1


Eşikleme (Thresholding)

Piksel değerleri, belirli bir komşuluk içinde değerlendirilir


ve eğer komşuluğun ortalama gri seviyesi üzerinde ise 1,
değilse 0 olarak atanır. 3x3 lokal pencere (kernel) için:

Yerel ort= (122+78+85+132+85+76+129+122+79)/9 = 100.8

123 122 78 85
128 132 85 76 1 0
133 129 122 79
120 60 85 83

85 > 100.8 olduğundan sonuç 0


Eşikleme (Thresholding)

Çoklu Eşikleme: 3 veya daha fazla dağılıma sahip


multimodal görüntülerde bölütleme yapmak amacı ile
kullanılır. İki veya daha fazla eşik değeri seçilir.

Örneğin aşağıdaki görüntüde şişelerin içindeki sıvının


bölütlenmesi için iki eşik değeri seçilmelidir.
Eşikleme (Thresholding)

Çoklu Eşikleme 2 eşik değeri için aşağıdaki gibi ifade


edilebilir.

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

MATLAB da eşikleme işlemleri için özel fonksiyonların


yanı sıra basit karşılaştırma operatörleri ile de eşikleme
işlemleri yapılabilmektedir. Bu fonksiyonlar:

graythresh Global eşikleme için eşik bulma


multithresh Çoklu eşikleme için eşik bulma
otsuthresh Global eşikleme için eşik bulma
adaptthresh Adaptif eşikleme için eşik bulma
im2bw Global eşik değeri ile eşikleme işlemi
imquantize Çoklu eşik değeri ile eşikleme işlemi

İlk üçü Otsu yöntemini kullanmaktadır.


MATLAB ile bölgesel bölütleme işlemleri

Matlab da görüntü histogramını oluşturmak için imhist


fonksiyonu kullanılır.

imhist(I) : İmajın histogramını görüntüler


imhist(I, n) : İmajın histogramını n adet bölgeye (bin)
bölerek görüntüler
[counts,x] = imhist(...): Histogram serisi counts
değişkenine de kopyalanabilir.
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

Özel fonksiyon kullanmadan eşikleme işlemi aşağıdaki


gibi yapılabilir.

Örnek:
I = imread('coins.png');
imhist(I);

im2=(I>100);
imshow(im2,[]);
MATLAB ile bölgesel bölütleme işlemleri

Bu görüntüye tek eşikleme yapılırsa

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

Çoklu eşikleme işlemi:

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

Çoklu eşikleme işlemi:

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

Graythresh fonksiyonu : Gri görüntüyü parametre olarak


alır ve optimal eşik değerini döndürür. Döndürülen
değer im2bw fonksiyonu kullanılarak veya karşılaştırma
yöntemleri kullanılarak eşikleme işlemi tamamlanır. Not:
burada optimal eşik değeri [0-1] arasına normalize
edilmiş değerdir.

level = graythresh(I)

I: gri tonlu görüntü


Level: [0-1] arasına normalize edilmiş eşik değeri
MATLAB ile bölgesel bölütleme işlemleri

İm2bw fonksiyonu: Gri tonlu veya rgb görüntüyü


parametre olarak verilen eşik değerine göre eşikleyerek
ikili görüntü haline getirir.

Kullanımı :

BW = im2bw(I, level): Gri tonlu görüntüyü eşikleme


BW = im2bw(X, map, level): İndeksli görüntüyü eşikleme
BW = im2bw(RGB, level): RGB görüntüyü eşikleme (önce
gri tonluya çevirir)
BW: döndürülen ikili görüntü (eşiklenmiş)
I: gri tonlu görüntü
level : [0-1] arası normalize edilmiş eşik değeri
MATLAB ile bölgesel bölütleme işlemleri

Ö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)

Multithresh fonksiyonu Otsu yöntemine göre çoklu


eşikleme için eşik belirler. Bu fonksiyon çoklu eşikleme
için imquantize ile kullanılabilir.

Kullanımı şu şekildedir.

thresh = multithresh(A) : tek eşik seviyesi döndürür


thresh = multithresh(A,N) : n adet eşik seviyesi döndürür
[thresh,metric] = multithresh(___) : [0-1] arası etkinlik
değerinin metric göstergesini de döndürür.

A: gri ton görüntü


Eşikleme (Thresholding)

imquantize fonksiyonu quantizasyon değerlerine göre


görüntüyü eşikler (etiketleme yapar) ve etiketlenmiş
değeri döndürür.

Kullanımı şu şekildedir
quant_A = imquantize(A,levels)

Levels: eşik değerleri


Quant_A: eşiklere göre etiketlenmiş görüntü
A: orijinal gri tonlu görüntü
Eşikleme (Thresholding)

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)

% BW2 yi renkli olarak görelim


BWrgb=label2rgb(BW2);
imshow(BWrgb);
Eşikleme (Thresholding)

Otsuthresh fonksiyonu (MATLAB R2016 ve sonrası) otsu


yöntemi ile global eşikleme değerini belirler.

T = otsuthresh(counts)
[T EM] = otsuthresh(counts)

Burada counts görüntünün histogramı, T belirlenen [0-1]


arası normalize edilmiş eşik değeridir.
Eşikleme (Thresholding)

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)

Adaptthresh fonksiyonu: Belirli bir hassasiyet


parametresi ile gri tonlu görüntüyü lokal olarak eşikleme
işlemine tâbi tutar. Piksel değerleri lokal ortalama gri ton
değerinin üstünde ise 1, altında ise 0 olarak eşikler.

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)

Adaptif eşiklemede genellikle birinci mertebeden


istatistiksel bilgi (first order statistic) olan ortalama
değer kriter olarak kullanılmaktadır.

Biz de adaptif eşikleme kodunu oluştururken lokal


bölgelerin ortalama değerlerini kullanacağız.

Pencereye dayalı bir işlem yapacağımız için orijinal


görüntüye pencere boyutu kadar piksel ilave etmemiz
gerekir.

Bu amaçla padarray komutundan faydalanacağız.


Eşikleme (Thresholding)

Padarray komutu herhangi bir matrise istenen satır ve


sütun sayısınca piksel ekler. Bu işleme padding
denilmektedir. Piksel değerleri 3 mantıkla
eklenebilmektedir.

B = padarray(A,padsize) : sıfır ekler (zero padding)


B = padarray(A,padsize,padval): padval değerlerine göre
ekleme yapar.
B = padarray(A,padsize,padval,direction): ilave olarak
yön seçilir.

A: orijinal girdi matrisi.


B: padding yapılmış matris
Eşikleme (Thresholding)

A: orijinal girdi matrisi.


B: padding yapılmış matris
Padval: aşağıdaki değerlerden seçilebilir:

'circular' Dairesel tekrarını ekler


'replicate' Sınır elemanlarının tekrarını ekler
'symmetric' Simetrik ekleme yapar

Direction: aşağıdaki değerleri alabilir.


'both' Matrisin hem önüne hem sonuna ekler
'post' Matrisin bitiminden ekler
'pre' Matrisin başlangıcından ekler
Eşikleme (Thresholding)

Örneğimizde ortalama değerlerin padding işlemi


sonucunda değişmemesi için symmetric ve both
seçenekleri kullanılmıştır. Original ve padding yapılan
görüntü aşağıdaki gibi olacaktır.

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)

Not: Aslında bu tür görüntülerde morfolojik tophat –


bottom hat dönüşümleri kullanılarak orijinal görüntü
iyileştirilip, ardından eşikleme yapılabilirdi.
Eşikleme tabanlı bölütleme ile şişe dolum
kontrolü uygulaması
Eşikleme (Thresholding)

Şişe dolumlarının yapıldığı bir otomasyon sisteminde


dolum seviyelerinin kameralı bir sistem aracılığı ile
kontrolünün yapılması istenmektedir.

Bunun için görüntü işleme algoritmasını geliştirmeye


çalışalım.
Eşikleme (Thresholding)

Burada ilk aşamada alınan gri tonlu görüntü uygun eşik


değerlerden geçirilerek sadece sıvının ön plana çıkması
sağlanacaktır.

Ardından morfolojik işlemlerle önemsiz alanlar yok edilerek daha


büyük ve homojen olan sıvı alanları korunacaktır.

Etiketleme işlemi ve bağlantılı bileşen analizi ile sıvı seviyelerinin


alanları hesaplanarak en miktarı olması gereken
seviyeden az olan şişe farklı renkle belirtilecektir.
Eşikleme (Thresholding)

Şişe dolumlarının yapıldığı bir otomasyon sisteminde


dolum seviyelerinin kameralı bir sistem aracılığı ile
kontrolünün yapılması istenmektedir.

Bunun için görüntü işleme algoritmasını geliştirmeye


çalışalım.
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);

You might also like