Tong Hop On Tap Xu Ly Anh

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 9

TỔNG HỢP ÔN TẬP XỬ LÝ ẢNH

1. ĐỌC ẢNH:
f=app.UIFigure;
[filename,path]=uigetfile({'*.png';'*.jpg';'*.tif'},'Chon anh');
if isequal(filename, 0) || isequal(path,0)
uialert(f,'Chua chon anh','Loi doc anh');
cla(app.axe_ag_xld);
else
file=strcat(path,filename);
[app.img, app.map]=imread(file);
imshow(app.img, app.map, 'parent', app.axe_ag_xld);
info=imfinfo(file);
arr=[];
if length(info)>1
app.lb_ttanh.Text=strcat(strcat("Tập tin chứa: ", num2str(length(info)))," ảnh");
arr=[arr,"THONG TIN ANH DAU TIEN"];
info=info(1);
else
app.lb_ttanh.Text="";
end
app.colortype=info.ColorType;
fields=fieldnames(info);
for i=1:length(fields)
if isnumeric(info.(char(fields(i))))
value=num2str(info.(char(fields(i))));
else
value = info.(char(fields(i)));
end
str=strcat(fields(i),": ",value);
arr=[arr;str];
arr=[arr;'-----------------------'];
end
app.txt_thongtin.Value=arr;
end
Chuyển ảnh  gray scale:
if app.colortype=="truecolor"
rgb=app.img;
gray=rgb2gray(rgb);
imshow(gray,'Parent',app.AxesAnhXam);
elseif app.colortype=="indexed"
ind=app.img;
gray=ind2gray(ind,app.map);
imshow(gray,'Parent',app.AxesAnhXam);
else
imshow(app.img,'Parent',app.AxesAnhXam);
end
Chuyển  binary
if app.colortype=="truecolor"
rgb=app.img;
gray=rgb2gray(rgb);
bw=imbinarize(gray);
imshow(bw,'Parent',app.AxesAnhNhiPhan);
elseif app.colortype=="indexed"
ind=app.img;
gray=ind2gray(ind,app.map);
bw=imbinarize(gray);
imshow(bw,'Parent',app.AxesAnhNhiPhan);
else
bw=imbinarize(app.img);
imshow(bw,'Parent',app.AxesAnhNhiPhan);
end
2. XỬ LÝ ĐIỂM
- Hiển thị histogram (ảnh vào: ảnh xám)
[pixels,graylevers]=imhist(app.img);
bar(app.AxesHistogram,graylevers,pixels,0.2,"stacked","black");
- Ảnh âm bản (ảnh vào: màu, bin, gray)
Dùng hàm J = imcomplement(I)
- Trượt tổ chức đồ:
Hàm trượt histogram
function [oimg,omap] = truot_histogram (file, c)
[img,map]=imread(file);
info=imfinfo(file);
if length (info)>1
info=info(1);
end
lmax=2^info.BitDepth-1;
[y1,x1]=size(img);
oimg=zeros(y1,x1);
omap=map;
for i=1:y1
for j=1:x1
oimg(i,j)= img(i,j)+c;
if oimg(i,j)>lmax
oimg(i,j)=lmax;
end
if oimg(i,j)<0
oimg(i,j)=0;
end
end
end
end
gọi hàm
if app.drd_xld.Value=="Truot to chuc do"
c=app.Slider.Value;
[im,m] = truot_histogram(app.file,c)
imshow(im,m,'parent',app.axe_kq_xld);
- Căng tổ chức đồ:
Hàm căng histogram
function [oimg,omap] = cang_histogram (file, c)
[img,map]=imread(file);
info=imfinfo(file);
if length (info)>1
info=info(1);
end
lmax=2^info.BitDepth-1;
[y1,x1]=size(img);
oimg=zeros(y1,x1);
omap=map;
for i=1:y1
for j=1:x1
oimg(i,j)= round(img(i,j)*c);
if oimg(i,j)>lmax
oimg(i,j)=lmax;
end
end
end
end
gọi hàm:
if app.drd_xld.Value=="Cang to chuc do"
c=app.txt_c.Value;
[im,m]=cang_histogram(app.file,c);
imshow(im,m,'parent',app.axe_kq_xld);
- Biến đổi tuyến tính: imadjust():
- Cân bằng tổ chức đồ: histeq()
3. LỌC KHÔNG GIAN
- Lọc thông cao (làm nét) (4 bộ lọc phát hiện biên)
if app.drd_boloc.Value=="Robert"
rox=[-1 0; 0 1];
rof_x=imfilter(app.gray,rox);
roy=rox';
rof_y=imfilter(app.gray,roy);
rokq= imadd(rof_x,rof_y);
kqnet=imadd(rokq,app.gray);
imshow(kqnet,'parent',app.axe_kq);
end
if app.drd_boloc.Value=="Prewitt"
%f_pre=fspecial('prewitt');
%fil_pre=imfilter(app.gray,f_pre);
%pre_kq=imadd(fil_pre,app.gray);
%imshow(pre_kq,app.map,'Parent',app.axe_kq)
prx=[-1 0 1; -1 0 1; -1 0 1];
pry=prx';
fil_prx=imfilter(app.gray,prx);
fil_pry=imfilter(app.gray,pry);
prkq=imadd(fil_pry,fil_prx);
prnet=imadd(prkq,app.gray);
imshow(prnet,app.map,'Parent',app.axe_kq)
end
if app.drd_boloc.Value=="Sobel"
%f_so=fspecial('sobel');
%fil_so=imfilter(app.gray,f_so);
%so_kq=imadd(fil_so,app.gray);
%imshow(so_kq,app.map,'Parent',app.axe_kq)
sox=[-1 0 1; -2 0 2; -1 0 1];
soy=sox';
fil_sox=imfilter(app.gray,sox);
fil_soy=imfilter(app.gray,soy);
sokq=imadd(fil_soy,fil_sox);
sonet=imadd(sokq,app.gray);
imshow(sonet,app.map,'Parent',app.axe_kq)
end
if(app.drd_boloc.Value=="Laplacian")
%f_la=fspecial('laplacian',0);
%fil_la=imfilter(app.gray,f_la);
%la_kq=imadd(fil_la,app.gray);
%imshow(la_kq,app.map,'Parent',app.axe_kq);
l=[0 -1 0; -1 4 -1; 0 -1 0];
al=imfilter(app.gray,l);
la_kq=imadd(al,app.gray);
imshow(la_kq,app.map,'Parent',app.axe_kq);
end
- Lọc thông thấp (làm mịn) (các bộ lọc làm mịn)
Bộ lọc trung bình:
if app.drd_lammin.Value=="Bo loc trung binh"
h=fspecial('average',[3 3]);
f=filter2(h,app.gray);
imshow(f,[],'Parent',app.axe_kg_kq);
Bộ lọc Gaussian:
Sử dụng fspecial : h = fspecial('gaussian',hsize,sigma)
if app.drd_lammin.Value=="Bo loc gaussian"
h=fspecial('gaussian',[3 3],1.0);
im=imfilter(app.gray,h);
imshow(im,[],'Parent',app.axe_kg_kq);
Sử dụng hàm imgaussfilt:
imgau=imgaussfilt(app.gray, 1.0, 'FilterSize',3,'Padding',0);
imshow(imgau,[],'Parent',app.axe_kg_kq);
Bộ lọc trung vị:
if app.drd_lammin.Value=="Bo loc trung vi"
med=medfilt2(app.gray);
imshow(med,'Parent',app.axe_kg_kq);
- Phục hồi ảnh: (thêm nhiễu, xử lý nhiễu) Giáo trình trang 99
Hàm thêm nhiễu: imnoise()
Các loại nhiễu: salt & pepper, gaussian, speckle, periodic (hàm riêng)
Vd: imnoise(img,’salt & pepper’,0.2)
Loại bỏ nhiễu:
 bộ lọc thông thấp (average) vd: a3=fspecial(‘average’); t_sp_a3=filter2(a3, t_sp)
 trung vị (medifilt2)
 Bộ lọc thích nghi: wiener2()
 xếp hạng thứ tự
vd: ordfilter2(img(ảnh đã thêm nhiễu),3,[0 1 0;1 1 1;0 1 0] )
 Phương pháp ngoại lai
 Loại bỏ nhiễu gaussian
Xử lý nhiễu muối tiêu với bộ lọc phông thấp và trung vị (ảnh màu)
m=app.efKT.Value;
a=fspecial('average',[m,m]);
nhieu=imnoise(app.img, 'salt & pepper');
a1=imfilter(nhieu, a);
imshow(a1,'Parent',app.axesSau);
a2=nhieu;
for c = 1 : 3
a2(:, :, c) = medfilt2(nhieu(:, :, c), [3, 3]);
end
imshow(a2,'Parent',app.axesSau_2);
m=app.efKT.Value;
nhieu=imnoise(app.img, 'gaussian');
Xử lý nhiễu gaussian với bộ lọc thích nghi (ảnh màu)
m=app.efKT.Value;
nhieu=imnoise(app.img, 'gaussian');
r = nhieu(:, :, 1);
g = nhieu(:, :, 2);
b = nhieu(:, :, 3);
r1 = wiener2(r, [m,m]);
g1 = wiener2(g, [m,m]);
b1 = wiener2(b, [m,m]);
z=cat(3,r1,g1,b1);
imshow(z,'Parent',app.axesloc);

Xử lý nhiễu muối tiêu với bộ lọc xếp hạng thứ tự (ảnh màu)
m=app.efKT.Value; //kích thước bộ lọc
n=app.efn.Value; //thứ tự
nhieu=imnoise(app.img, 'salt & pepper');
r = nhieu(:, :, 1);
g = nhieu(:, :, 2);
b = nhieu(:, :, 3);
r1 = ordfilt2(r, n, ones(m,m));
g1 = ordfilt2(g, n, ones(m,m));
b1 = ordfilt2(b, n, ones(m,m));
z=cat(3,r1,g1,b1);
imshow(z,'Parent',app.axesloc);
4. PHÁT HIỆN BIÊN: (ảnh vào: ảnh xám)
- 3 bo loc robert, prewitt, sobel:
Robert:
ro_x=[1 0 ; 0 -1];
gx=filter2(ro_x, app.gray);
imshow(gx/255,'Parent',app.axe_ngang);
ro_y =[0 1 ; -1 0] ;
gy=filter2(ro_y,app.gray);
imshow(gy/255,'Parent',app.axe_doc);
kq=sqrt(gx.^2 + gy.^2);
imshow(kq/255,'Parent',app.axe_kq)
Prewitt:
pr_x=[-1 0 1; -1 0 1; -1 0 1];
gx=filter2(pr_x, app.gray);
imshow(gx/255,'Parent',app.axe_doc);
pr_y =[-1 -1 -1; 0 0 0; 1 1 1] ;
gy=filter2(pr_y,app.gray);
imshow(gy/255,'Parent',app.axe_ngang);
kq=sqrt(gx.^2 + gy.^2);
imshow(kq/255,'Parent',app.axe_kq)
Sobel:
so_x=[-1 0 1; -2 0 2; -1 0 1];
gx=filter2(so_x, app.gray);
imshow(gx/255,'Parent',app.axe_doc);
so_y =[-1 -2 -1; 0 0 0; 1 2 1] ;
gy=filter2(so_y,app.gray);
imshow(gy/255,'Parent',app.axe_ngang);
kq=sqrt(gx.^2 + gy.^2);
imshow(kq/255,'Parent',app.axe_kq)
- Bộ lọc Lalapcian:
Bộ lọc LoG (Laplacian of Gaussian)
l=[0 -1 0; -1 4 -1; 0 -1 0];
iel=imfilter(double(app.gray),l,'symmetric');
imshow(iel/255,'Parent',app.log);
Bộ lọc Lalapcian 2Dl
l=[0 -1 0; -1 5 -1; 0 -1 0];
al=filter2(l,app.gray);
imshow(al/255,'Parent',app.laplacian);
Áp dụng fspecial để tạo bộ lọc:
Vd: fspecial(‘laplacian’,0); fspecial(‘log’,0);
5. XỬ LÝ HÌNH THÁI: phép ăn mòn, làm dày (ảnh vào là ảnh nhị phân)
Hàm làm dày: imdilate(image, kernel)
Hàm ăn mòn: imerode(image, kernel)
Phép đóng: làm dày -> ăn mòn
sq=ones(3,3);
di=imdilate(app.bw,sq);
imshow(di,'parent',app.axeday);
er=imerode(di,sq);
imshow(er,'parent',app.axemon);
imshow(er,'parent',app.axekq);
Phép mở: ăn mòn -> làm dày
sq=ones(3,3);
er=imerode(app.bw,sq);
imshow(er,'parent',app.axemon);
di=imdilate(er,sq);
imshow(di,'parent',app.axeday);
imshow(di,'parent',app.axekq);

6. PHÂN ĐOẠN ẢNH: dựa trên phân ngưỡng (toàn cục) giáo trình 137
(Hiển thị histogram)
c=app.txt_nguong.Value;
pn=im2bw(app.img,c); 0<c<1
imshow(pn,app.map,'Parent',app.axe_pn_kq);

7. XỬ LÝ ẢNH MÀU: (ảnh vào: ảnh màu)


Tách ảnh RGB
if app.colortype ~= "truecolor"
uialert(f,'phai chon anh RGB','loi chon anh')
cla(app.axegoc)
else
imshow(app.img,app.map,'parent',app.axegoc);
end

red=app.img;
red(:,:,2)=0;
red(:,:,3)=0;
green=app.img;
green(:,:,1)=0;
green(:,:,3)=0;
blue=app.img;
blue(:,:,1)=0;
blue(:,:,2)=0;
imshow(red,'Parent',app.axered);
imshow(green,'Parent',app.axegreen);
imshow(blue,'Parent',app.axeblue);

Tách ảnh CMY


cyan=app.img;
cyan(:,:,1)=0;
magenta=app.img;
magenta(:,:,2)=0;
yellow=app.img;
yellow(:,:,3)=0;
imshow(cyan,'Parent',app.axeblue);
imshow(magenta,'Parent',app.axered);
imshow(yellow,'Parent',app.axegreen);

You might also like