Şimdi Ara

Hacettepeli'den MATLAB'da Görüntü İşleme Dersleri

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
21
Cevap
1
Favori
25.785
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
1 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • HACETTEPELİ’DEN MATLAB’DA GÖRÜNTÜ İŞLEME DERSLERİ

    lftx, hacettepeli_muhendis, ehven-i Şer
    xpostx@hotmail.com


    DERS I Hacettepeli'den MATLAB'da Sinyal İşleme

    Merhaba arkadaşlar yaklaşık 2 yıl önce yazdığım Hacettepeli'den MATLAB'da Sinyal İşleme konulu yazılarım epey, beğenilmişti bundan aldığım motivasyonla bildiğim dilimin döndüğü kadar, görüntü işleme anlatmaya karar verdim, size garanti verebilirim ki bu konu epey eğlenceli çünkü olan biten herşey gözünüzün önünde somut şeylerden bahsetmiyoruz.

    Derslere ilk aklıma gelen temel 3x3 filtreler ile başlayacağım, talep olursa benimde vaktim olursa derslerin devamı da gelebilir.

    Dersi takip edebilmek için gereken tek şey, MATLAB ve tabiki Image Processing Toolbox. Eğer dersler ilerler de Denoising (Gürültüden Arındırma) anlatırsam o zaman Wavelet Toolbox'ta gerekebilir ama merak etmeyin Muhtemelen elinizdeki MATLAB'da hepsi vardır ;)


    Bildiğimiz gibi görüntüler 3 boyutlu ortamdaki objelerin 2 boyutlu ortama iz düşümlerinden başka birşey değil, renk parlaklık vs bunlarda objelerin ve ortamın özelliklerinden kaynaklanıyor..

    Şimdi şu adresten test imajımızı çekelim
    http://www-ics.acs.i.kyoto-u.ac.jp/~yy/SampleImages/lenna/jpg/lenna.jpg

    bunu MATLAB’ın work klasörüne kopyalayalım. MATLAB’a bunu okutmak için şu sihirli satırları yazıyoruz.

    >> Lena=imread('lenna.jpg');

    Gördüğünüz gibi Lena isimli bir matris oluştu. Kısaca MATLAB’a okutulan görüntülerin hallerinden bahsedelim. MATLAB da görüntüler büyük matrisler halinde saklanıyor matrisin her bir elemanı bir pixel değeride karşılık gelen rengi gösteriyor.

    Eğer imaj siyah beyaz ise matris 2 boyutlu (bizde oluşan gibi çünkü görüntümüz siyah beyaz) renkli ise 3 boyutlu oluyor, Renkli imajları siyah beyaz 3 imaj olarak düşünebiliriz bu durumda bir renk tek bir sayı değil RGB (red,green,blue) ya karşılık gelen 3 elemanlı bir vektör oluyor, görüntüyü ilk MATLAB a yüklediğimizde MATLAB oluşturduğu matrisi, uint8 formatında kaydediyor yani işaretsiz 8 bit sayılardan oluşan bir resim. 0 dan başlayıp 255 e kadar gidiyor bu sayılar bildiğimiz gibi. Ancak bu sayılarla işlem yapamayacağımız için onları 0 ile 1 arasında double a çevirmemiz gerekiyor, ilerde kullanacağımız “imshow” komutu double formatındaki matrisleri 0-1 arasındaymış gibi uint8 olanlarıda 0-255 miş gibi değerlendiriyor mesela 0-255 arasında değerler alan bir matrisi “imshow” ile görmeye kalkarsak 1 üzerindeki tüm değerler beyaz gözükecektir aynı şekilde tüm negatif renklerde siyah bu yüzden aralığa dikkat etmeliyiz, her neyse şimdi resmi işleyebileceğimiz bir hale sokalım dediğim gibi 0 ve 1 arası double değerlere bunu yapmak için şu komutu yazıyoruz.

    >> Lena=im2double(Lena);

    Bu komut 255 değerini 1 e çekiyor diğer tüm değerleride buna göre skalalandırıyor.

    Şimdi MATLAB’a yüklediğimiz imajı görelim,

    >> figure; %bu satır yeni bir figür penceresi açıyor
    >> imshow(Lena); %bu da o pencereye resmi çiziyor

    Aslında bu iki komutu aynı satırada yazabilirsiniz bundan sonra ben öyle kullanacağım. Eğer figure yazmazsanız aynı pencereye çizecektir imajı.

     Hacettepeli'den MATLAB'da Görüntü İşleme Dersleri


    Evet güzel bir başlangıç yaptık, hanımda güzel bir ekstra bilgi olarak, aslında bu resim görüntü işleme camiasında çok popüler bir test resmi, adı da “lena” küçük bir araştırmadan sonra resmin akademik camiaya nasıl girdiğini öğrendim kendisi 1972 playboy güzellerinden amerikan üniversitelerinden berkley’de internetin ilk temelleri atılırken görüntü transferi deneyleri yapıyorlar ellerinde hazır bir görüntü yok, asistanın birisi eline geçen playboydaki bu hatunu scan ediyor ve ordan camiaya yayılıyor...

    Şimdi bu dersin asılamacına gelelim (talep olursa yazacak olduğum) ilerki derslerde işmize yarayacak olan 3x3 görüntü filtrelerinin biraz detaylarından bahsedeyim, bu filtreler 3x3 matrislerden başka birşey değillerdir aslında teorik olarak işe biraz girersek bunlar 3x3 FIR filtrelerden başka birşey değiller (FIR: Finite Impulse Response, Sonlu İmpals Tepkisi), biz de bu filtreleri çeşitli amaçlarla kullanabiliriz ortalama alma, kenar bulma vs vs...Genel olarak 3x3 bir matrisi yazarsak

    [KB][.K.][KD]
    [.B.][.M.][.D.]
    [GB][.G.][GD]

    burda M merkez, KB,K... de Kuzey Batı, Kuzey pixellerini gösteriyor,



    < Bu mesaj bu kişi tarafından değiştirildi lftx -- 30 Nisan 2007; 5:53:05 >







  • bu ceplere gelen sayılar karşılık gelen pixelin kaçla çarpıldığını gösteriyor, her pixel kendisine karşılık gelen sayıyla çarpıldıktan sonra çıkış imajında M noktasına karşılık gelen pixele bu değer yazılıyor, aslında yapılan iş convolution işlemi ama MATLAB bunu iki farklı yolla yapıyor,

    1-korelasyon yöntemiyle
    2-konvolüsyon yöntemiyle

    konvolüsyon yönteminde sinyallerden biri 180 derece döndürülüp bu işlem yapılırken korrelasyon yönteminde sinyaller döndürülmeden bu işlem yapılıyor. merak etmeyin kafanızı karıştırmayalım eğer 'conv' diye belirmezseniz MATLAB hiç bir sinyali çevirmiyor yani 'corr' opsiyonuyla filterlemeyi yapıyor, bu filtrelemeyi MATLAB’da “imfilter” komutuyla yapabiliriz bir kaç 3x3 filtreye örnek vermek gerekirse,

    [1][0][0]
    [0][0][0]
    [0][0][0]

    Bu filtre KB pixelini 1 le çarpıp diğerlerini 0 la çarpıyor ve çıkış imajında merkez pixel yerine yazıyor, yani KB pixellerinin hepsi merkeze kaymış oluyor tüm imajı KB nın tam zıttı GD yönüne kaydırmış oluyor,

    Bunu deneyebiliriz ancak tek pixeli gözümüz fark etmeyecektir,

    [0][0][0]
    [0][1][0]
    [0][0][0]

    Bu filtrede imaja hiç birşey yapmadan çıkışa veriyor,

    [1][0][0]
    [0][1][0] /3
    [0][0][1]

    “/3 tüm matrisin 3 e bölündüğünü gösteriyor”

    Bu filtrede KB,M,GD köşegenini topluyor ve M pixeli yerine yazıyor bu filtreyi denemek için şunu yapalım

    >> h=[1 0 0;0 1 0; 0 0 1]/3; %filtreyi oluşturduk
    >> Lena_h=imfilter(Lena,h,'same'); %filtreden imajı geçirdik

    Burda “imfilter” yukarda anlattığım konvolüsyon veya korelasyon operasyonunu yapıyor, ‘same’ opsiyonu çıkış imajının işlenen imajla aynı boylarda olmasını sağlıyor. Burda dikkat edilmesi gereken şey, ilk argüman işlenecek olan imaj ikincisi de kullandığımız filtre şimdi bu imaja bakalım

    >> figure; imshow(Lena_h);

     Hacettepeli'den MATLAB'da Görüntü İşleme Dersleri


    Gördüğünüz gibi görüntü KB,M,GD doğrultusunda kaymış hareketli gibi gözüküyor, gelecek derse kadar filtre kat sayılarını değiştirip elde ettiğiniz sonuçlara bakın, negatif sayılarda deneyin ;)

    Lftx, hacettepeli_muhendis, ehven-i Şer
    2007



    < Bu mesaj bu kişi tarafından değiştirildi lftx -- 30 Nisan 2007; 5:39:18 >




  • güzel bir çalışma olmuş bu arada lenna ilede tanışma fırsatımız oldu. ellerinize emeğinize sağlık. diğer dersleride bekliyoruz...
  • öncelikle emeklerin için teşekkürler

    ben de matlab ile image processing için uğraşmayı düşünenlerin okumasını gerektiğini düşündüğüm pdf in linkini vereyim

    http://www.mathworks.com/access/helpdesk/help/pdf_doc/images/images_tb.pdf

    bu arada geçende lena nın pgm sini ararken kendisinin full resmini gördüm ve artık image işine daha bi sevgiyle bağlandım





  • google da grafiklere lenna yazınca orjinali çıkıyor resmin.
  • 30 nisandaki konuyu canlandırmışsın ama süper olmush eline sağlık.. çok işime yarıcak..:D
  • dersin hocası bu resmi bana sölediinde hiç böyle bişi çıkıcağını düşünmemiştim
    hazır dikkat çekmişken yardım da istiyim.

    quote:

    Dersi takip edebilmek için gereken tek şey, MATLAB ve tabiki Image Processing Toolbox. Eğer dersler ilerler de Denoising (Gürültüden Arındırma) anlatırsam o zaman Wavelet Toolbox'ta gerekebilir ama merak etmeyin Muhtemelen elinizdeki MATLAB'da hepsi vardır ;)


    bana bu konuda yol gösterebilirseniz memnun olurum. şu anda wavelet transformun matematiksel ifadelerine çalışıyorum. şimdiden teşekkür ederim.
  • cok güzel olmuş devamı olsa ne güzel olur
    opencv den soğudum, sıcak matlab ortamı gibisi yok
  • Tam da matlab üzerinde görüntü işleme ile ilgili kaynak arıyordum.Acaba elinizde medikal görüntü işleme teknikleri hakkında döküman var mı?Özellikle doku analiz teknikleri üzerinde araştırma yapıyorum.
  • Sourceforge da bu konu ile alakalı yazılmış programlar var.Sanırım onların sitelerinde teknikler vardır.Google ilede birçok döküman bulabilirsiniz.Bende 2 boyutlu kesitden 3 boyutlu modele çevirme hakkında döküman var ama Allah bilir hangi klasörün içindedir :)
  • cok basarılı gercekten..cok isime yaradi..helal olsun..bence devam etmelisiniz derslere..tesekkur ediyorum..
  • ben de yazdığım ufak bi kod örneği sunayım

    bu arada aşağıda yazan imscaled fonksiyonu fourier transformlarını görüntülemede kolaylık olsun diye yazdığım ufak bi fonksiyondur, onu da yazayım fonksiyon olarak kaydetmek isteyen olursa diye. ama isterseniz imscaled yerine imshow da kullanabilirsiniz

    %------imscaled--------
    function imscaled(x)
    x = x/max(max(x));
    figure,imshow(x);

    bu kodun amacı nedir diye soran arkadaşlar için cevabımız şudur " eğer bir resimde blura neden olan fonksiyonu tam olarak elde edebilirsek, blura uğramış resimden deblurred resmi de elde edebilirizi göstermeye çalışmak" ama tabiki gerçek hayatta blura neden olan fonksiyonu böyle kolayca bulamayız o da ayrı konu

    quote:

    clear all
    close all
    clc

    % Blurring

    I = im2double(imread('lena.tiff')); % double,grayscale 256x256 lık lena resmi
    FI = fspecial('gaussian', 15, 1.7 ); % 15x15 lik, standard deviation ı 1.7 olan gaussian (blur) filtre
    FI2 = zeros(256); % 256x256 lık 0 matrisi
    FI2(121:135,121:135) = FI; % Resmimimz 256x256 lık olduğu için filtremizi de aynı boyuta getiriyoruz
    TI = fft2(I); % Resmin fourier transformu
    TFI2 = fft2(FI2); % Filtrenin fourier transformu
    CA = TI.*TFI2; % Time domaininde yapmamız gereken convolution,freq. domaininde olduğumuz için çarpım olarak yapıldı
    ICA = fftshift(ifft2(CA)); % Çarpımın inverse fourier transformu ( resmin parçlarının doğru yerde görünmesi için fftshift kullanıldı )
    imscaled(I); % Resmin orjinal hali
    imscaled(ICA); % Freq. domaininde blura uğramış resim

    % Deblurring

    DI = ICA; % Input resmimiz blur olmuş resim
    TDI = fft2(DI); % Input resminin fourier transformu
    TFI3 = 1./TFI2; % Deblurring filtremiz
    DCA = TDI.*TFI3; % Freq. dom. deki çarpım
    IDCA = fftshift(ifft2(DCA)); % Çarpımın inverse fft si
    imscaled(IDCA); % Deblurred image




  • ufak bi downsampling örneği

    quote:

    clear all
    close all
    clc

    I = im2double(imread('lena.tiff'));
    imscaled(I);title('original image');

    IN = imresize(I,[128 128],'nearest');
    imscaled(IN);title('nearest');

    IL = imresize(I,[128 128],'bilinear');
    imscaled(IL);title('bilinear');

    IC = imresize(I,[128 128],'bicubic');
    imscaled(IC);title('bicubic');

    IF = fft2(I);
    IZ = zeros(128);
    IZ(1:64,1:64) = IF(1:64,1:64);
    IZ(1:64,65:128) = IF(1:64,193:256);
    IZ(65:128,1:64) = IF(193:256,1:64);
    IZ(65:128,65:128) = IF(193:256,193:256);
    IIF = ifft2(IZ);
    imscaled(IIF);title('fft');
  • elimizde N tane resim var ve bu resimlerin hepsi tek bir resmin N tane farklı gürültü girmiş şekli olsun. eğer bu N tane gürültülü resmi toplarsak resimdeki gürültüyü azaltabiliriz

    aşağıdaki kod da bunun nasıl olduğunu görmemize yardımcı oluyor, yalnız bu sefer script yerine function olarak yazdım. kodu şu şekilde kullanabilirsiniz:

    I = imread('lena.tif');
    noisyimagesum(I);

    quote:


    function O = noisyimagesum(I);

    I = im2double(I);

    num = input('Enter the number of image(s): ');
    if isempty(num)
    num = 0;
    end
    C = num;

    imshow(I),title('original image');

    [Y X] = size(I);
    M = zeros(Y,X,C);
    N = zeros(Y,X);

    for i = 1:C
    M(:,:,i) = imnoise(I);
    %figure,imshow(M(:,:,i));
    end

    for j = 1:C
    N = N + M(:,:,j);
    end

    T = N./C;

    figure,imshow(T),title('sum of noisy images');




  • excel e resmin r,g,b kanalları nasıl atılıyor. hiç bilen yokmu
  • beyler öncelikle hepinize iyi günler.matlab ödevim var acil yardım istiyorum.matlab te LENA nın sadece şapkası görünücek diğer yerler siyah olcak.bunun kodlarını yazabilirseniz çok memnun olurum şimdiden teşekkürler...
  • updullah
  • iyi günler mühendislikte matlabta hız tespiti konusunda tez yapıyorum ve yardımcı kaynaklara ihtiyacım var eğer bu konu üzerinde çalışan veya image prosesing üzerinde çalıan varsa yardımcı kaynak önerebilir mi cevabınızı bekliyorum
  • arkadaşlar şu proje için bana yardım edebilecek birisi varmı acaba 1 hafta içinde yetiştirmem gerekiyor.
    http://www.baskent.edu.tr/~ozparlak/courses/EEM401/EEM401Proje.pdf
  • merhabalar;

    nasılsınız ben Ali sizden bir ricam var ben MR görüntülerini matlabta klasik filitrelerden geçirmek istiyorum. tez için gerekli matlabta kalsik filitreler neler ve bu resimleri bu filitrelerden geçirip aralarındaki farkları karılaştırmam gerekiyor bu konuda bana yardımcı olabilirmisiniz bu tezin sadece bir kısmı bu konud abana yardımcı olursanız sevinirim işin içine matlab girince ben duruyorum hiç ilgilenmedim çünk ü mablabla :(:(:

    şimdiden teşekkürler
  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.