in OpenCV

OpenCV ile Kovaryans Matrisi Oluşturma

Kovaryans iki değişkenin birlikte ne kadar değiştiklerini ölçer. Kovaryans matrisi ise matrisin tüm değişkenleri arasındaki kovaryansların bir matris olarak ifade edilmesidir.

Vektörün (Sütun matrisi veya satır matrisi) (i,j) elemanının kovaryansını aşağıdaki formülle hesaplayabiliriz.
kov-formul
Burada,
bek-deg
X vektörünün i’inci değişkeninin ortalamasıdır. Vektörün tüm değişkenlerinin birbirleri arasındaki kovaryansı bulmak için aşağıdaki formül kullanılabilir.

kov-mat

Örnek olarak, aşağıdaki tabloda bir sınıftaki 5 öğrencinin üç farklı dersten aldığı notlar verilmiştir.

Öğrenci Matematik Bilgisayar Fizik
Ali 90 60 90
Veli 90 90 30
Ahmet 60 60 60
Mehmet 60 60 90
Hüseyin 30 30 30

Yukarıdaki tabloyu, aşağıdaki gibi 5×3 boyutunda bit matris olarak yazabiliriz. Bu matrisin sütunları derslere satırları ise öğrencilere denk gelir.

A = [90, 60, 90;
90, 90, 30;
60, 60, 60;
60, 60, 90;
30, 30, 30]

Vektör (sütun matrisi) olarak aşağıdaki gibi yazabiliriz.

A = [90,60,90,90,90,30,60,60,60,60,60,90,30,30,30]

Bu matris için OpenCV’nin Mat sınıfından 3 sütun ve 5 satırdan oluşan bir nesne yaratıyoruz. Sonrasında, matrisi A değişkenindeki verilerle dolduruyoruz.

Mat A = new Mat(new Size(3,5),CvType.CV_64F);
double[] data = {90,60,90,90,90,30,60,60,60,60,60,90,30,30,30};
A.put(0, 0, data);

Aşağıdaki gibi kovaryans matrisini hesaplayalım. Üç tane değişkenimiz olduğu için kovaryans matrisi 3×3 boyunda olmalıdır.

Mat kov = new Mat(new Size(3,3),CvType.CV_32FC1);
Mat ort = new Mat(new Size(3,3),CvType.CV_32FC1);
Core.calcCovarMatrix(A,kov,ort,Core.COVAR_NORMAL | Core.COVAR_ROWS);
System.out.println(kov.dump());

Çıktı:

C=[2520, 1800, 900;
 1800, 1800, 0;
 900, 0, 3600]

Şimdi, kovaryan matrisini yorumlayalım.

Birincisi, bu matris simetriktir. Örneğin, 1 satır 2 sütundaki değer ile 2 satır birinci sütundaki değer bir biribine eşittir.

İkincisi, köşegende yer alan 2520, 1800 ve 3600 sayıları derslerin değişintilerini (varyans) verir.  Örneğin fizik dersinin değişintisi (3600) bilgisayar dersininin değişintisinden (1800) iki kat daha fazladır. Örneğimizde, tüm derslerin not ortalaması 60’dır. Fizik dersi notlarını baktığımızda ortalamadan uzakta 4 kişi varken, bilgisayar dersi notlarında ortalamadan uzakta iki kişi bulunuyor.

Köşegen dışında yer alan değerler eşdeğişintiler (kovaryansları) olarak yorumlanabilir. Yani, iki dersin birbirlerine göre değişimleri.

Örneğin, C(2,3) ve C(3,2) 0 çıkmıştır. Dolayısyla, bilgisayar ve fizik dersi notları arasında eşdeğişinti yoktur. Yani, bu derslerden birinin notlarına bakıp diğer ders hakkında bir yorum yapılamaz.

C Kovaryans matrisinin C(1,2) ile C(2,1) elamanı Matematik ile Bilgisayar derslerinin kovaryansını göstermektedir ve 1800 çıkmıştır. C(1,3) ile C(3,1) elemanı  Matematik ile Fizik derslerinin kovaryansına karşılık gelmektedir ve 900 çıkmıştır. Yani, Matemetik ve Bilgisayar notlarının birlikte değişimi, Metematik ve Fizik notlarının birlikte değişimine göre iki kat daha yüksektir.

Programın tamamı:

package com.zk.denemeler;
 
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Size;
 
public class KovMatris {
	static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Mat A = new Mat(new Size(3,5),CvType.CV_32FC1);
		double[] data = {90,60,90,90,90,30,60,60,60,60,60,90,30,30,30};
		A.put(0, 0, data);
		System.out.println(A.dump());
		Mat kov = new Mat(new Size(3,3),CvType.CV_32FC1);
		Mat ort = new Mat(new Size(3,3),CvType.CV_32FC1);
		Core.calcCovarMatrix(A,kov,ort,Core.COVAR_NORMAL | Core.COVAR_ROWS);
		System.out.println(kov.dump());				
	}
 
}

Kaynaklar

facebooktwittergoogle_plusredditpinterestlinkedinmail

Write a Comment

Comment