15 Haziran 2008 Pazar

MATLAB

Ayrık Kosinüs Dönüşümü
Resimlere ayrık kosinüs dönüşümü (Discrete Cosine Transform) ile resimlerin kosinüs katsayılarını bulup bunlardan yüksek frekanslı olanların çoğunu atıp ters dönüşüm yaptıktan sonra nasıl resmin büyük miktarda korunduğuna örnek. Bu yöntem JPEG dosya biçiminde kullanılıyor.
Örnek kod parçası:
I = imread('/home/firari/Desktop/sandalye/gray.jpg');
I = im2double(I);T = dctmtx(8);
B = blkproc(I,[8 8],’P1*x*P2′,T,T’);
mask = [1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
B2 = blkproc(B,[8 8],’P1.*x’,mask);
I2 = blkproc(B2,[8 8],’P1*x*P2′,T’,T);
diff=I-I2;
Burada oluşan I2 resmi sıkıştırılarak kaydedilecek resim, diff ise sıkıştırma sırasında oluşan kaybı ifade eden hata resmi.
Mask olarak koddaki matris verildiğinde oluşan I2 resmi.

Hata resmi (diff)

1 lerin sayısını azalttığımızda kayıp artıyor ve kalite düşüyor.

Bir ödevde burada bitti bir daha ki ödevde görüşmek üzere
Yorumlar (0)
24 Mart 2007
İlk örüntü tanıma çalışmam
Yüksek lisansta aldığım örüntü tanıma (Pattern Recognition) dersi kapsamında ilk ödev resim işleme (ki bu dersi de alıyorum) teknikleri ile basit bir resmi tanıması daha kolay hale getirmekti. Bu arada bu işlemleri Matlab ile yapıyorum.
Resmi (Resim 1) Matlab’a aktardıktan sonra önce hesaplamaları kolaylaştırması açısından boyutunu küçülttüm. Daha sonra gri-tonlama haline getirdim (Resim 2). 3. adımda resmin kenarlarını buldum (Resim 3) Bu aşamada resim gri-tonlamadan siyah beyaza dönmüş oldu. Daha sonra bu kenarları belirginleştirdim (Resim 4). En son aşamada ise ortadaki boşlukları beyaz ile doldurdum (Resim 5). Böylece tanınabilecek bir sandalye prototipimiz oluşmuş oldu. Resim galerisinde bu adımları daha iyi farkedebilirsiniz.

Adım 1: Resmi Okuma
I=imread('/home/firari/Desktop/sandalye/chair.jpg');
Adım 2: Resmin boyutunu küçültme ve gri-tonlamaya çevirme
I2=imresize(I,0.5);
gray=rgb2gray(I2);

Adım 3: Resmin kenarlarını bulma ve thresholding (Edge detection)
bw=edge(gray,'sobel',graythresh(gray)*0.2);

Adım 4: Kenarlarını belirginleştirme
e90 = strel('line', 3, 90);
se0 = strel(’line’, 3, 0);
BWsdil = imdilate(bw, [se90 se0]);

Adım 5: Ortadaki boşlukları beyaz ile doldurma
BWdfill = imfill(BWsdil, 'holes');

Hiç yorum yok: