Yazan: Serkan Kaba 1 Nisan 2007
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
Yazı kategorisi: görüntü işleme, matlab | » yorum bırak;
Yazan: Serkan Kaba 24 Mart 2007
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');
Düzeltme: Matlab kurulum belgesinden dolayı Aydın Tarık Zengin‘e teşekkürlerimi borç bilirim.
Düzeltme 2: Kodlar eklendi.
Yazı kategorisi: görüntü işleme, matlab, örüntü tanıma | 6 Yorum »