You are on page 1of 12

LAB1

function [] = Otele_Dondur( inimage )


%Size ile görüntünün boyut bilgilerinin alinmasi
[satir,sutun,katman]=size(inimage);
%Cikti resminin tanımlanması
outimage1=zeros(satir,sutun);
outimage2=zeros(satir,sutun);
%Girdi resmi renkli bir görüntü ise (RGB,katman=3) ise
% gri seviye resme dondurulmasi
if(katman>1)
inimage=rgb2gray(inimage);
end
%Oteleme
for y=1:satir
for x=1:sutun
outimage1(y,x)=inimage(satir-y+1,x);
end
end
%Dondurme
for y=1:satir
for x=1:sutun
outimage2(y+15,x+12)=inimage(y,x);
end
end
outimage1=uint8(outimage1);
outimage2=uint8(outimage2);
subplot(1,3,1),imshow(inimage);
subplot(1,3,2),imshow(outimage1);
subplot(1,3,3),imshow(outimage2);
end
function [outimage] = PikselTersleme(inimage )
%"Size" ile görüntünün boyut bilgilerinin alinmasi
[satir,sutun,katman]=size(inimage);
%Girdi resmi renkli bir görüntü ise (RGB,katman=3) ise
% gri seviye resme dondurulmasi
if(katman>1)
inimage=rgb2gray(inimage);
end
%Cikti resminin tanımlanması
outimage=zeros(satir,sutun);

%Satir satir piksel değerlerinin işlenmesi,


%Girdi resminde 0 (siyah) değeri olan bir
%piksel cıkısta 255 (beyaz) olur.
for y=1:satir
for x=1:sutun
outimage(y,x)=255-inimage(y,x);
end
end
outimage=uint8(outimage);
end

%Herhangi bir resim;


%inimage=imread(resim yolu) alınarak okunur.
%inimage=imread('G:\ImageProcessing\Lab1\images\pembe.jpg') gibi...

%imshow ile de resim figür olarak gösterilebilir.


%imshow(inimage);

%Görüntü Kırpma
%kırp=inimage(100:200,150:250,:)

function [ griSeviye ] = Rgb2GrayCevir( inimage )


%"Size" ile görüntünün boyut bilgilerinin alinmasi
[satir,sutun,katman]=size(inimage);

%Cikti resminin tanımlanması


griSeviye=zeros(satir,sutun);
%Girdi resmi renkli bir görüntü ise (RGB,katman=3) ise
% gri seviye resme dondurulmasi
if(katman==1)
disp('Resim zaten gri seviye,tekrar gri seviye dönüşüm yapılamaz.');
griSeviye=inimage;
return;
else
%Renkli görüntü 0.2989 * R + 0.5870 * G + 0.1140 * B oranlarında
%karıstırılarak gri
%seviye görüntü elde edilir.

for m=1:satir
for n=1:sutun
griSeviye(m,n)=0.2989*inimage(m,n,1)...
+0.5870*inimage(m,n,2)...
+0.1140*inimage(m,n,3);
end
end
end
% For döngüleri kullanmadan dönüşüm:
% % griSeviye=0.2989*inimage(:,:,1)+0.5870*inimage(:,:,2)+0.1140*inimage(:,:,3);
subplot(1,2,1), imshow(inimage,[]),title('Renkli Görüntü');
subplot(1,2,2), imshow(griSeviye,[]),title('Gri Seviye Görüntü');

end

function [outimage] = SiginakBulma( inimage,esik )


%Size ile görüntünün boyut bilgilerinin alinmasi
[satir,sutun,katman]=size(inimage);
%Cikti resminin tanımlanması
outimage=zeros(satir,sutun);
%Girdi resmi renkli bir görüntü ise (RGB,katman=3) ise
% gri seviye resme dondurulmasi
if(katman>1)
inimage=rgb2gray(inimage);
end
%Belirlenen esik değerine göre sıgınakların siyah, arkaplanın beyaz renk
%yapılması
for y=1:satir
for x=1:sutun
if(inimage(y,x)>esik)
outimage(y,x)=0;
else
outimage(y,x)=255;
end
end
end
outimage=uint8(outimage);
end
LAB2

%Keskinleştirici filtre, görüntüdeki kenarları bulur.


%ay.jpg yada checkboard_corrupt.pgm ile test edilebilir.
function [outimage] = Prewitt( inimage)
%Filtre boyutu
filtreBoyutu=3;

%Girdi resminin boyutlarının alınması


[row,col,katman]=size(inimage);
if(katman>1)
inimage=rgb2gray(inimage);
end
%Sınır değerleri için alınan veriler
boyut1=(filtreBoyutu-1)/2;
boyut2=((filtreBoyutu-1)/2)+1;
%Girdi resminin veri tipinin double'ye dönüştürülmesi
inimage=double(inimage);
%Filtre uygulanırken taşmalar olacağından çıktı resmini tekrar
%boyutlandırıyoruz.
outimage=double(zeros(row-filtreBoyutu-1,col-filtreBoyutu-1));
filtre1=[-1 -1 -1; 0 0 0; 1 1 1];
filtre2=[-1 0 1; -1 0 1; -1 0 1];
%Döngü ile filtreyi görüntü üzerinde gezdiriyoruz.
%%%%%%%%%%KONVOLUSYON İŞLEMİ%%%%%%%%%%%%%%%%%
for y=boyut2:row-boyut2
for x=boyut2:col-boyut2
komsu=inimage((y-boyut1):y+boyut1,x-boyut1:x+boyut1);
%belirlenmiş olan noktanın filtre uygulandıktan sonraki yeni değeri
toplam1=0;
toplam2=0;
for m=1:filtreBoyutu
for n=1:filtreBoyutu
toplam1=toplam1+filtre1(m,n)*komsu(m,n);
end
end
for m=1:filtreBoyutu
for n=1:filtreBoyutu
toplam2=toplam2+filtre2(m,n)*komsu(m,n);
end
end
deger=power(toplam1,2)+power(toplam2,2);
outimage(y-boyut1,x-boyut1)=sqrt(deger);
end
end
%%%%%%%%%%%%%5KONVOLUSYON İŞLEMİ%%%%%%%%%%%%%%%%%%%
%%
%Çıktı resminin veri tipinin integer a dönüştürülmesi
outimage=uint8(outimage);

end

%log.png test edilebilir.


%Farklı cSabit değerleri ile test edelim.
%cSabit=50,75,100,150
function [ outimage ] =LogTransform( image, cSabit)
%Girdi resmin gösterilmesi
figure(1),imshow(image,[]);
title('Log Transform Uygulanmadan Önceki Resim');
image=im2double(image);
%Girdi resminin boyutlarının alınması
[ row,col,k]=size(image);
if(k>1)
image=rgb2gray(image);
end
%Çıktı resmine ilk değer atama
outimage=zeros(row,col);
%Piksel piksel log transformation uygulanması
for y=1:1:row
for x=1:1:col
outimage(y,x)=cSabit*log(1+image(y,x));
end
end
outimage=uint8(outimage);
figure(2),imshow(outimage,[]);
title('Log Transform Uygulandıktan Sonraki Resim');
end
%Keskinleştirici filtre, görüntüdeki kenarları bulur.
%ay.jpg yada checkboard_corrupt.pgm ile test edilebilir.
function [outimage] = Laplace( inimage)
%Filtre boyutu
filtreBoyutu=3;

%Girdi resminin boyutlarının alınması


[row,col,katman]=size(inimage);
if(katman>1)
inimage=rgb2gray(inimage);
end
%Sınır değerleri için alınan veriler
boyut1=(filtreBoyutu-1)/2;
boyut2=((filtreBoyutu-1)/2)+1;
%Girdi resminin veri tipinin double'ye dönüştürülmesi
inimage=double(inimage);
%Filtre uygulanırken taşmalar olacağından çıktı resmini tekrar
%boyutlandırıyoruz.
outimage=double(zeros(row-filtreBoyutu-1,col-filtreBoyutu-1));
filtre=[0 1 0; 1 -4 1;0 1 0];
%Döngü ile filtreyi görüntü üzerinde gezdiriyoruz.
%%%%%%%%%%%%KONVOLUSYON İŞLEMİ%%%%%%%%%%%%%%%
for y=boyut2:row-boyut2
for x=boyut2:col-boyut2
komsu=inimage((y-boyut1):y+boyut1,x-boyut1:x+boyut1);
%belirlenmiş olan noktanın filtre uygulandıktan sonraki yeni değeri
toplam=0;
for m=1:filtreBoyutu
for n=1:filtreBoyutu
toplam=toplam+filtre(m,n)*komsu(m,n);
end
end
outimage(y-boyut1,x-boyut1)=toplam;
end
end
%%%%%%%%%%%%%%%KONVOLUSYON İŞLEMİ%%%%%%%%%%%%%%
%Çıktı resminin veri tipinin integer a dönüştürülmesi
outimage=uint8(outimage);
end

%ekmek.png test edilebilir.


function [] =KontrastGerme( inimage )
% Görüntünün boyut bilgilerinin alınması
[row,col,katman ]=size(inimage);
% Girdi resminin gri seviye görüntüye dönüştürülmesi
if(katman>1)
inimage=rgb2gray(inimage);
end
subplot(2,2,1),imshow(inimage),title('Girdi Görüntüsü');
subplot(2,2,2), imhist(inimage),title('Girdi Görüntüsünün Histogramı');

%Çıktı resmine ilk değer atama


outimage=zeros(row ,col);
%Görüntüdeki en düşük ve en yüksek gri seviye piksel değerinin bulunması
maxDeger=max(inimage(:));
minDeger=min(inimage(:));

outimage=double(outimage);
for i=1:row
for j=1:col
%Kontrast germe işlemi
pay=double(inimage(i,j)-minDeger);
payda=double(maxDeger-minDeger);
outimage(i,j)=(pay*255)/(payda);
end
end
%Sonuçları kaydetmeden önce görüntü formatının uint8 'e döndürülmesi
outimage=uint8(outimage);

subplot(2,2,3),imshow(outimage),title('Çıktı Görüntüsü');
subplot(2,2,4), imhist(outimage),title('Çıktı Görüntüsünün Histogramı');
end

%ekmek.png test edilebilir.


function [ outimage ] = HistogramEsitleme( inimage )
%Girdi görüntüsünün boyut bilgilerinin alınması
[satir,sutun,katman]=size(inimage);
%Görüntünün gri seviye görüntüye dönüştürülmesi
if(katman>1)
inimage=rgb2gray(inimage);
end
%Toplam piksel sayısı
pikselSayisi=satir*sutun;

HIm=uint8(zeros(size(inimage,1),size(inimage,2)));
%Olasılık vektörü
probc=zeros(256,1);
%Kümülatif toplam vektörü
cum=zeros(256,1);
%Çıktı vektörü
output=zeros(256,1);
%Görüntünün histogram bilgileri
[counts,x] = imhist(inimage);
%Olasılıklar
probf = counts/ pikselSayisi;
sum=0;
%255 gri seviye maksimum değeri
no_bins=255;
%Histogram Eşitleme işlemi
for i=1:size(probf)
sum=sum+counts(i);
cum(i)=sum;
probc(i)=cum(i)/pikselSayisi;
output(i)=round(probc(i)*no_bins);
end
for i=1:size(inimage,1)
for j=1:size(inimage,2)
HIm(i,j)=output(inimage(i,j)+1);
end
end
HIm = im2double(HIm);
MAx = max(max(HIm));
MIn = min(min(HIm));
outimage= uint8(round(((HIm - MIn) / ( MAx - MIn))*255));

end

LAB3

function [outimage] = Prewitt( inimage)


%Filtre boyutu
filtreBoyutu=3;
%Girdi resminin boyutlarının alınması
[row,col,katman]=size(inimage);
if(katman>1)
inimage=rgb2gray(inimage);
end
%Sınır değerleri için alınan veriler
boyut1=(filtreBoyutu-1)/2;
boyut2=((filtreBoyutu-1)/2)+1;
%Girdi resminin veri tipinin double'ye dönüştürülmesi
inimage=double(inimage);
%Filtre uygulanırken taşmalar olacağından çıktı resmini tekrar
%boyutlandırıyoruz.
outimage=double(zeros(row-filtreBoyutu-1,col-filtreBoyutu-1));
filtre1=[-1 -1 -1; 0 0 0; 1 1 1];
filtre2=[-1 0 1; -1 0 1; -1 0 1];
%Döngü ile filtreyi görüntü üzerinde gezdiriyoruz.
for y=boyut2:row-boyut2
for x=boyut2:col-boyut2
komsu=inimage((y-boyut1):y+boyut1,x-boyut1:x+boyut1);
%belirlenmiş olan noktanın filtre uygulandıktan sonraki yeni değeri
toplam1=0;
toplam2=0;
for m=1:filtreBoyutu
for n=1:filtreBoyutu
toplam1=toplam1+filtre1(m,n)*komsu(m,n);
end
end
for m=1:filtreBoyutu
for n=1:filtreBoyutu
toplam2=toplam2+filtre2(m,n)*komsu(m,n);
end
end
deger=power(toplam1,2)+power(toplam2,2);
outimage(y-boyut1,x-boyut1)=sqrt(deger);
end
end
%Çıktı resminin veri tipinin integer a dönüştürülmesi
outimage=uint8(outimage);

end

function [outimage] = Laplace( inimage)


%Filtre boyutu
filtreBoyutu=3;

%Girdi resminin boyutlarının alınması


[row,col,katman]=size(inimage);
if(katman>1)
inimage=rgb2gray(inimage);
end
%Sınır değerleri için alınan veriler
boyut1=(filtreBoyutu-1)/2;
boyut2=((filtreBoyutu-1)/2)+1;
%Girdi resminin veri tipinin double'ye dönüştürülmesi
inimage=double(inimage);
%Filtre uygulanırken taşmalar olacağından çıktı resmini tekrar
%boyutlandırıyoruz.
outimage=double(zeros(row-filtreBoyutu-1,col-filtreBoyutu-1));
filtre=[0 1 0; 1 -4 1;0 1 0];
%Döngü ile filtreyi görüntü üzerinde gezdiriyoruz.
for y=boyut2:row-boyut2
for x=boyut2:col-boyut2
komsu=inimage((y-boyut1):y+boyut1,x-boyut1:x+boyut1);
%belirlenmiş olan noktanın filtre uygulandıktan sonraki yeni değeri
toplam=0;
for m=1:filtreBoyutu
for n=1:filtreBoyutu
toplam=toplam+filtre(m,n)*komsu(m,n);
end
end
outimage(y-boyut1,x-boyut1)=toplam;
end
end
%Çıktı resminin veri tipinin integer a dönüştürülmesi
outimage=uint8(outimage);
end

function [ outimage] = Filtreler(filtreAdi)


[filename, pathname]=uigetfile({'*.jpg';'*.gif';'*.png';'*.ppm';'*.pgm'},'Resim dosyasını
seçiniz:');
fullPathName=strcat( pathname, filename);
inimage=imread(fullPathName);
switch(filtreAdi)
case 'Prewitt'
outimage=Prewitt(inimage);
baslik='Prewitt uygulanmış resim';
case 'Laplace'
outimage=Laplace(inimage);
baslik='Laplace uygulanmış resim';
%case ler arırılabilir.
%Sobel, Roberts, Mean, Median, vb. filtreleri eklenebilir.
end
subplot(1,2,1),imshow(inimage), title('Orjinal Resim');
subplot(1,2,2),imshow(outimage), title(baslik);

end

function [ outimage ] = Esikleme( inimage,esik )


[satir,sutun,katman]=size(inimage);
if(katman>1)
inimage=rgb2gray(inimage);
end
%Öncelikle gelen resmin kontrast ayarını yapalım. Kontrastı ayarlamak için kullanılan
%görüntü iyileştirme yöntemleri: Kontrast germe, histogram eşitleme

[ alinanResim ] =histeq( inimage);


%[ alinanResim ] =ContrastStretching(inimage );

outimage=zeros(satir,sutun);
for i=1:satir
for j=1:sutun
if(alinanResim(i,j)>=esik)
outimage(i,j)=255;
else
outimage(i,j)=0;
end
end
end
figure(2);
subplot(1,3,1), imshow(inimage),title('Orjinal');
subplot(1,3,2), imshow(alinanResim),title('Kontrast ayarı yapılmış resim');
subplot(1,3,3), imshow(outimage),title('Segmente edilmiş resim');
end

function [outimage] =ContrastStretching( inimage )


% Görüntünün boyut bilgilerinin alınması
[row,col,katman ]=size(inimage);
% Girdi resminin gri seviye görüntüye dönüştürülmesi
if(katman>1)
inimage=rgb2gray(inimage);
end
figure(1);
subplot(2,2,1),imshow(inimage),title('Girdi Görüntüsü');
subplot(2,2,2), imhist(inimage),title('Girdi Görüntüsünün Histogramı');

%Çıktı resmine ilk değer atama


outimage=zeros(row ,col);
%Görüntüdeki en düşük ve en yüksek gri seviye piksel değerinin bulunması
maxDeger=max(inimage(:));
minDeger=min(inimage(:));

outimage=double(outimage);
for i=1:row
for j=1:col
%Kontrast germe işlemi
pay=double(inimage(i,j)-minDeger);
payda=double(maxDeger-minDeger);
outimage(i,j)=(pay*255)/(payda);
end
end
%Sonuçları kaydetmeden önce görüntü formatının uint8 'e döndürülmesi
outimage=uint8(outimage);

subplot(2,2,3),imshow(outimage),title('Çıktı Görüntüsü');
subplot(2,2,4), imhist(outimage),title('Çıktı Görüntüsünün Histogramı');
end

You might also like