Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
20
Cevap
26270
Tıklama
1
Öne Çıkarma
Hacettepeli'den MATLAB'da Görüntü İşleme Dersleri
L
19 yıl (762 mesaj)
Yüzbaşı
Konu Sahibi

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ı.

< Resime gitmek için tıklayın >

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,

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





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

L
19 yıl (762 mesaj)
Yüzbaşı
Konu Sahibi

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);

< Resime gitmek için tıklayın >

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 >
Bu mesaja 1 cevap geldi.
R
19 yıl (4016 mesaj)
Yarbay

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...


Bu mesaja 1 cevap geldi.
B
19 yıl (1183 mesaj)
Yüzbaşı

ö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


Bu mesaja 1 cevap geldi.
Z
19 yıl (1072 mesaj)
Yüzbaşı


google da grafiklere lenna yazınca orjinali çıkıyor resmin.


Bu mesaja 1 cevap geldi.
K
19 yıl (4267 mesaj)
Yüzbaşı

30 nisandaki konuyu canlandırmışsın ama süper olmush eline sağlık.. çok işime yarıcak..:D


Bu mesaja 1 cevap geldi.
Z
19 yıl (1072 mesaj)
Yüzbaşı

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.


Bu mesaja 1 cevap geldi.
A
19 yıl (6991 mesaj)
Binbaşı

cok güzel olmuş devamı olsa ne güzel olur
opencv den soğudum, sıcak matlab ortamı gibisi yok


Bu mesaja 1 cevap geldi.
M
19 yıl (1724 mesaj)
Binbaşı

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.


Bu mesaja 1 cevap geldi.
S
19 yıl (2360 mesaj)
Yarbay

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 :)


Bu mesaja 1 cevap geldi.
F
19 yıl (1 mesaj)
Er

cok basarılı gercekten..cok isime yaradi..helal olsun..bence devam etmelisiniz derslere..tesekkur ediyorum..


Bu mesaja 1 cevap geldi.
B
19 yıl (1183 mesaj)
Yüzbaşı

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


Bu mesaja 1 cevap geldi.
B
19 yıl (1183 mesaj)
Yüzbaşı

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');


Bu mesaja 1 cevap geldi.
B
19 yıl (1183 mesaj)
Yüzbaşı

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');


Bu mesaja 1 cevap geldi.
P
17 yıl (2630 mesaj)
Binbaşı

excel e resmin r,g,b kanalları nasıl atılıyor. hiç bilen yokmu


Bu mesaja 1 cevap geldi.
B
15 yıl (1 mesaj)
Er

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...


Bu mesaja 1 cevap geldi.
O
15 yıl (56 mesaj)
Çavuş

updullah



H
15 yıl (1256 mesaj)
Yüzbaşı

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


Bu mesaja 1 cevap geldi.
D
15 yıl (1 mesaj)
Er

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


Bu mesaja 1 cevap geldi.
A
15 yıl (155 mesaj)
Teğmen

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