Navigation

Search

Categories

On this page

Image Processing :: Region Properites
Image Processing :: Thresholding :: Otsu Method
Binary Image Processing :: Morphology :: Erosion
Recursive Connected Component Labeling
How to Export Table Data to Flat File :: Oracle UnLoader, Text File Exporter
How to run Oracle SQL Developer In Ubuntu
How to Install JDK to Ubuntu
Data Minig :: Classification and Clustering :: Naive Bayes and Decision Tree :: Analysis

Archive

Blogroll

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

RSS 2.0 | Atom 1.0 | CDF

Send mail to the author(s) E-mail

Total Posts: 291
This Year: 0
This Month: 0
This Week: 0
Comments: 0

Sign In
Pick a theme:

# Tuesday, March 25, 2008
Tuesday, March 25, 2008 11:36:03 PM (GTB Standard Time, UTC+02:00) ( Computer Vision | Image Processing )

Bir resim içindeki parçalar hakkında bilgi sahibi olabilmek, benzerlikler ve farklılıkları bulabilmek amacıyla bu çalışma yapılacaktır. Genel olarak kullanılan özellikler aşağıda belirtilmiştir:

  • Alan : Toplam piksel sayısıdır.
  • Merkez(Centroid) [r',c'] : Satır ve sütundaki toplamların, alana bölünmesidir.
  • Mean Radial Distance: Her bir piksel ile merkez nokta arasındaki farkın ortalamasıdır.
  • Variance Radial Distance : : Her bir piksel ile merkez nokta arasındaki farktan, Mean Radial Distance değerinin farkının karelerinin ortalamalarının kareköküdür.
  • Second-Order Row Moment : Merkez noktasının apsisiyle her bir pikselin apsisinin farkları toplamının, alana oranıdır.
  • Second-Order Column Moment: Merkez noktasının ordinatıyla her bir pikselin ordinatı farkları toplamının, alana oranıdır.
  • Second-Order Mixed Moment: Merkez noktası ile her bir pikselin apsis ve ordinatları farkları çarpımlarının toplamının, alana oranıdır.
  • Circularity2: Mean Radial Distance değerinin Variance Radial Distance değerine oranıdır.
  • Circularity1: Perimeter karesinin alana oranıdır.
  • Perimeter: Şeklin çevresidir. Bu değer, şekil sınırlarının toplamı olarak da hesaplanabilir.

     

    Algoritma ve Kodlama

 

Kodlamanın göze çarpan kısımları aşağıda belirtilmiştir:

public static RegionProperties[] FindRegionsProperties(BinaryPGM _image, int _neighbour)

{

ConnectedComponent CC = new ConnectedComponent(_image, _neighbour);

RegionProperties[] Props = new RegionProperties[CC.LabelCount+1];

byte[][] ImageData = CC.LabeledImage.GetImageDataInMatrixForm();

for (int i = 0; i < Props.Length; i++)

{

Props[i] = new RegionProperties();

Props[i].RegionNumber = i;

}

 

//Props.Length + 1 ::: 0 pixel for background.it will not used

int[] Area = new int[Props.Length + 1];

ArrayOperations.InitializeArray(ref Area, 0);

double[] CentroidRow = new double[Props.Length];

ArrayOperations.InitializeArray(ref CentroidRow, 0);

double[] CentroidColumn = new double[Props.Length];

ArrayOperations.InitializeArray(ref CentroidColumn, 0);

double[] MRD = new double[Props.Length];

ArrayOperations.InitializeArray(ref MRD, 0);

double[] VRD = new double[Props.Length];

ArrayOperations.InitializeArray(ref VRD, 0);

double[] SORM = new double[Props.Length];

ArrayOperations.InitializeArray(ref SORM, 0);

double[] SOCM = new double[Props.Length];

ArrayOperations.InitializeArray(ref SOCM, 0);

double[] SOMM = new double[Props.Length];

ArrayOperations.InitializeArray(ref SOMM, 0);

 

for (int i = 0; i < ImageData.Length; i++)

{

for (int k = 0; k < ImageData[i].Length; k++)

{

Area[ImageData[i][k]]++;

CentroidColumn[ImageData[i][k]] += k;

CentroidRow[ImageData[i][k]] += i;

}

}

 

 

for (int i = 1; i < Props.Length; i++)

{

Props[i].Area = Area[i];

Props[i].CentroidX = CentroidColumn[i] / Props[i].Area ;

Props[i].CentroidY = CentroidRow[i] / Props[i].Area;

}

 

for (int i = 0; i < ImageData.Length; i++)

{

for (int k = 0; k < ImageData[i].Length; k++)

{

MRD[ImageData[i][k]] += Math.Abs(Props[ImageData[i][k]].CentroidY - i) + Math.Abs(Props[ImageData[i][k]].CentroidX - k);

}

}

 

for (int i = 1; i < Props.Length; i++)

{

Props[i].MeanRadialDistance = MRD[i] / (_image.Length * _image.Width);

}

 

for (int i = 0; i < ImageData.Length; i++)

{

for (int k = 0; k < ImageData[i].Length; k++)

{

VRD[ImageData[i][k]] += Math.Pow((Math.Abs(Props[ImageData[i][k]].CentroidY - i) + Math.Abs(Props[ImageData[i][k]].CentroidX - k) - Props[ImageData[i][k]].MeanRadialDistance), 2.0);

SORM[ImageData[i][k]] += Math.Pow(Props[ImageData[i][k]].CentroidY - i, 2.0);

SOCM[ImageData[i][k]] += Math.Pow(Props[ImageData[i][k]].CentroidX - k, 2.0);

SOMM[ImageData[i][k]] += (i - Props[ImageData[i][k]].CentroidY ) * (k - Props[ImageData[i][k]].CentroidX);

}

}

 

for (int i = 1; i < Props.Length; i++)

{

Props[i].VarianceRadialDistance = VRD[i] / (_image.Length * _image.Width);

}

 

for (int i = 1; i < Props.Length; i++)

{

Props[i].Circularity2 = Props[i].MeanRadialDistance / Math.Pow(Props[i].VarianceRadialDistance, 0.5);

}

 

for (int i = 1; i < Props.Length; i++)

{

Props[i].SecondOrderColumnMoment = SOCM[i] / Props[i].Area;

Props[i].SecondOrderRowMoment = SORM[i] / Props[i].Area;

Props[i].SecondOrderMixedMoment = SOMM[i] / Props[i].Area;

}

 

BinaryPGM BoundaryImage = Morphology.GetBoundaryImage(_image);

BoundaryImage.Save("boundary.pgm");

ConnectedComponent CCBoundary = new ConnectedComponent(BoundaryImage, _neighbour);

CCBoundary.LabeledImage.Save("boundary_props.pgm");

byte[] ImageDataBoundary = CCBoundary.LabeledImage.Data;

for (int i = 1; i < Props.Length; i++)

{

Props[i].Perimeter = ArrayOperations.GetArrayElementCount(ImageDataBoundary, (byte)i);

Props[i].Circularity = (Props[i].Perimeter * Props[i].Perimeter) / Props[i].Area;

}

 

return Props;

 

Analiz ve Yorumlar

 

Bu çalışmanın sonuçları aşağıda belirtilmiştir. Şekil 1'de orijinal resim bulunmaktadır. Şekil 2 de ise parçalara ayrılmış resmin numaralandırılmış hali bulunmaktadır. Orijinal resim, 3X3 lük bir yapılandırma elamanı ile Erosion işlemi uygulanıp, orijinal resimden çıkarıldığında sınırlar bulunmuştur. Sınırların alanı, çevre olarak hesaplanmıştır.

 

Şekil 1 Region Properties – Orijinal Resim

 

Şekil 2 Region Properties – Labeled, Numbered

 

Şekil 3 Region Properties – Boundary

 

 

 

1

2

3

4

5

6

7

8

9

10

11

Area

560

2064

2223

1920

458

944

1548

2556

1012

1482

3136

Centroid

52,5; 27,5

146; 58,5

244,58; 78,64

96,5; 90,5

50,5; 95

167,67; 138,78

255,5; 147,5

66; 162,5

250,5; 197,5

180,5; 207,29

71,5; 213,5

Mean Radial Distance

0,11

0,66

0,79

0,7

0,07

0,21

0,42

0,87

0,22

0,4

1,44

Variance Radial Distance

1,71

16,38

23,38

21,24

0,77

3,91

8,96

22,45

3,93

8,5

52,42

Second-Order Row Moment

16,25

213,57

158,69

533,25

44,31

80,76

78,91

222,91

97,75

115,54

85,25

Second-Order Column Moment

133,25

133,23

327,45

47,92

29,96

104,31

192,35

185,63

68,39

127,9

800,25

Second-Order Mixed Moment

0

0

77,23

0

0

12,41

0

0

0

0

0

Circularity2

0,08

0,16

0,16

0,15

0,08

0,11

0,14

0,18

0.11

0.14

0.2

Circularity1

0,08

16,05

36,8

21,68

19,29

32,44

20,93

19,98

16,19

15,59

20,9

Perimeter

104

182

286

204

94

175

180

226

128

152

256

Şekil

Yatay dik dörtgen

Kare

Üçgen

Dikey dik dörtgen

Küre

Üçgen

Elips

Küre

Kare

Kare

Yatay dik dörtgen

Tablo 1 Region Properties Gösterimi

 

Yukarıdaki tablodan çıkarılacak sonuçlar şunlardır:

  • Second-Order Mixed Moment değeri sadece üçgen şeklindeki parçalar için 0 dan farklı çıkmıştır. Üçgen parçaların ayırt edilebilmesi için bu özellik kullanılabilir.

  • Circularity1 değeri, kare parçalar için yaklaşık 16 çıkmıştır. Kare parçaların ayırt edilebilmesi için bu özellik kullanılabilir.

     

 

Uygulama

       

Uygulama, C Sharp(C#) dilinde kodlanmıştır. ComputerVision.exe adlı dosya, çalıştırılabilir halini içermektedir. İşlenecek resimler, bu dosyanın bulunduğu dizine bırakılmalıdır. İşlem sonucunda oluşan rapor dosyaları ve görüntüler, bu dizin altında oluşacaktır. Aşağıda uygulamanın ne şekilde kullanılacağı belirtilmiştir:

       

C:\cv>ComputerVision.exe

Computer Vision v1.0.0

Mennan Tekbir

       

Usage:

  ComputerVision <operation> <image>

       

Example:

  ComputerVision 3 peppersgray.pgm

       

Operations :

  1 : Connected Components

  2 : Erosion(Morphology)

  3 : Otsu Thresholding

  4 : Region Properties

Press any key to exit...

       

       

C:\cv>

       

Uygulamayı indirmek için...

ComputerVision.zip (442.9 KB)

Comments [0] | | # 
# Monday, March 24, 2008
Monday, March 24, 2008 10:21:04 AM (GTB Standard Time, UTC+02:00) ( Computer Vision | Image Processing )

 

Resim işlemede en temel kesimleme(segmentation) uygulamalarından biri Thresholding' dir. Resmi binary hale getirmek için kullanılan bu yöntemde en önemli olan, eşik(threshold) değerinin belirlenmesidir. Bu değerin düşük veya yüksek olmasına resmin detayları değişir. Aşağıda bu durumu gösterilmiştir:

 

Şekil 1 Orjinal Resim

Şekil 2 Farklı Eşik Değerlerine göre Resimler

 

Eşik değerinin belirlenmesinde birden fazla yöntem bulunmaktadır. Burada sadece Otsu yöntemi incelenecektir.

Otsu Thresholding

 

Bu yöntem, yinelemeli(iterative) olarak bir eşik değerinin bulunmasını amaçlar. Bu değerin, sınıf-içi varyantın en küçük hale gelmesiyle veya sınıflar-arası varyantın en küçük hale gelmesiyle elde edilir. Bu işlem için öncelikli olarak resmin histogramı çıkarılmalıdır. Aşağıda Otsu yönteminde kullanılan formüller verilmiştir:

 

Şekil 3 Otsu Threshold – Formüller

 

 

Algoritma ve Kodlama

Kodlamanın göze çarpan kısımları aşağıda belirtilmiştir:

 

public OtsuThresholdProperties GetOtsuThreshold( double[] _probabilities )

{

int TMax=-1, i;

double VMax = Double.MinValue;

double N1, N2, N, qt, qt_b, n1t, n1t_b, n2t, n, v;

 

qt_b = _probabilities[0];

n1t_b = 0; N1 = 0; N2 = 0;

 

for ( i = 0; i < _probabilities.Length; i++)

{

n += i*_probabilities[i];

}

N = n;

 

for ( i = 1; i < _probabilities.Length; i++)

{

if (_probabilities[i] != 0)

{

qt = qt_b + _probabilities[i];

if (qt != 1 && qt != 0)

{

n1t = (qt_b * n1t_b + i * _probabilities[i]) / qt;

n2t = (n - qt * n1t) / (1 - qt);

 

v = qt * (1 - qt) * (n1t - n2t) * (n1t - n2t);

 

if (v > VMax)

{

VMax = v;

TMax = i;

N1 = n1t;

N2 = n2t;

}

qt_b = qt;

n1t_b = n1t;

}

}

}

 

return new OtsuThresholdProperties(TMax,N,N1,N2);

 

}

 

Analiz ve Yorumlar

 

Otsu yöntemi ile eşik bulma çalışmasının sonuçları aşağıda belirtilmiştir:

Şekil 4 Peppersgray – Orijinal

 

 

Şekil 5 Pepersgray - Eşik : 116

 

 

Grafik 1 Peppersgray – Histogram

 

 

Şekil 6 Blocks – Orijinal

 

 

Şekil 7 Blocks - Eşik: 111

 

 

Grafik 2 Blocks - Histogram

 

 

Peppersgray

Blocks

Mu1

69,94

24,97

Mu2

163,04

197,71

Mu

117,12

47,1

Threshold

116

111

Tablo 1 Otsu Threshold Bilgileri

Yukarıdaki tabloda ilgili değerler bulunmaktadır. Histogram eğrilerinden de görüleceği üzere peppersgray resminde renkler 0-255 arasında normal bir şekilde dağılmışken, blocks resminde ise 12-40 arasında değişmektedir.

Uygulama

     

Uygulama, C Sharp(C#) dilinde kodlanmıştır. ComputerVision.exe adlı dosya, çalıştırılabilir halini içermektedir. İşlenecek resimler, bu dosyanın bulunduğu dizine bırakılmalıdır. İşlem sonucunda oluşan rapor dosyaları ve görüntüler, bu dizin altında oluşacaktır. Aşağıda uygulamanın ne şekilde kullanılacağı belirtilmiştir:

     

C:\cv>ComputerVision.exe

Computer Vision v1.0.0

Mennan Tekbir

     

Usage:

  ComputerVision <operation> <image>

     

Example:

  ComputerVision 3 peppersgray.pgm

     

Operations :

  1 : Connected Components

  2 : Erosion(Morphology)

  3 : Otsu Thresholding

  4 : Region Properties

Press any key to exit...

     

     

C:\cv>

     

Uygulamayı indirmek için...

ComputerVision.zip (442.9 KB)

Comments [0] | | # 
# Sunday, March 23, 2008
Sunday, March 23, 2008 12:36:09 PM (GTB Standard Time, UTC+02:00) ( Computer Vision | Image Processing )

Binary resim morfolojisi, görüntü işlemede oldukça sık kullanılan bir yaklaşımdır. Bir B binary resim S adı verilen bir yapılandırma elemanı ile işlenmektedir. Morfolojik işlemler genel anlamda, dilation ve erosion olmak üzere iki çeşittir. Bu iki ana işlem yardımıyla opening ve closing gibi farklı işlemler de çıkmaktadır.

Yapılandırma elemanları(Structuring Element), farklı şekillerde ve büyüklüklerde olabilmektedir. Bunların bir merkez noktası bulunmakta olup, işlenecek resmin her bir pikseli bu noktaya oturtularak işlem yapılmaktadır. Bunları bir kısmı aşağıda belirtilmiştir:

Şekil 10 Yapılandırma Elemanları

 

Erosion

Erosion işlemi de morfolojik işlemlerden biridir. Basit bir örneği, aşağıda belirtilmiştir.

Şekil 11 Erosion Nasıl Yapılır

 

 

Erosion işleminin kullanıldığı yerler resim küçültme veya köprü vb parçaları kaldırmak olarak belirtilebilir.

Şekil 12 Erosion Kullanımı 1

 

 

Şekil 13 Erosion Kullanımı 2

 

Boundary Detection With Erosion

 

Erosion işlemi, bir resim parçasının sınırlarını belirlemede yardımcı olabilmektedir. Aşağıdaki resimde bu durum belirtilmiştir:

   

 

1

1

1

1

1

 

   

 

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

   

1

1

1

1

1

1

1

1

1

1

1

1

1

   

1

1

1

1

1

1

1

1

1

1

1

1

1

   

1

   

1

1

1

1

1

   

1

1

1

1

1

Şekil 14 Boundary Extraction with Erosion

 

Algoritma ve Kodlama

Kodlamanın göze çarpan kısımları aşağıda belirtilmiştir:

public BinaryPGM ApplyErosionFilter(BinaryPGM _image, StructuringElement _se)

{

 

for (i = MiddleY; i < ImageMatrix.Length - MiddleY; i++)

{

for (k = MiddleX; k < ImageMatrix[i].Length - MiddleX; k++)

{

if (ImageMatrix[i][k] == 1)

{

Found = true;

}

else

{

Found = false;

}

 

StartX = k - MiddleX;

StartY = i - MiddleY;

ii = 0;

kk = 0;

while (Found == true && ii < SizeY )

{

kk = 0;

while (Found == true && kk < SizeX )

{

if (SEMatrix[ii][kk] == 1 && ImageMatrix[StartY + ii][StartX + kk] == 0 )

{

Found = false;

}

kk++;

}

ii++;

}

 

if( Found )

{

ErodedImageMatrix[i][k] = 1;

}

else

{

ErodedImageMatrix[i][k] = 0;

}

}

 

}

}

 

Analiz ve Yorumlar

 

Erosion işlemi sonucunda elde edilen sonuçlar ve yorumlar aşağıda belirtilmiştir. Kullanılan yapılandırma elemanı 11 X 11 DİSK'tir.

 

0

0

0

1

1

1

1

1

0

0

0

0

0

1

1

1

1

1

1

1

0

0

0

1

1