Mã số của phòng bảng điểm được lưu trong mảng hai chiều MASO[7,11], những vị trí không tô đen thì được gán mặc định là -1. Điểm số của thí sinh được lưu trong mảng DIEM , điểm của thí sinh thứ nhất bắt đầu từ vị trí DIEM(8) . Điểm số được gán mặc định là -1.
Tùy vào mục đích sử dụng, ta sẽ dùng dữ liệu thu được sau khi chạy chương trình.
Kết quả:
- Đáp ứng được yêu cầu của bài toán.
- Do ta chỉ làm trên những ảnh không bị scan nghiêng nên đối với một số ảnh nghiêng, thuật toán cho kết quả sai. Vì vậy, khi scan phải đặt tấm ảnh cho thật ngay.
20 trang |
Chia sẻ: tuandn | Lượt xem: 2178 | Lượt tải: 2
Bạn đang xem nội dung tài liệu Đề tài Đọc điểm từ bảng điểm, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC KHOA HỌC
ÑÑ{ÒÒ
BÀI THỰC HÀNH PHÂN TÍCH XỬ LÝ ẢNH
Đề tài: Đọc điểm từ bảng điểm
Giáo viên hướng dẫn: Thầy Phạm Thế Bảo
Sinh viên thực hiện:
Phạm Văn Dũng 0611032.
Châu Ngọc Huy 0611053.
Nguyễn Văn Tiên 0611215.
Trịnh Tấn Đạt 0611302.
Chương Trình Minh Họa Cho Phần Lý Thuyết
Mô hình nhiễu.
Một vài hàm mật độ xác suất nhiễu quan trọng.
Code Matlab:
v=0.013;
syms x;
x=0:0.001:0.1;
y1=1./sqrt(2*pi*v.^2).*exp(-(x-0.05).^2/(2*v^2));
syms z;
z=0:0.01:0.1;
y2=0;
z=0.1:0.01:1;
y2=1./0.02*(z-0.1).*exp(-(z-0.1).^2/0.02);
syms t;
t=0:0.01:1.5;
y3=18.^2.*t.^(4-1).*exp(-18.*t)./giaithua(4);
y4=3^2.*exp(-3.*t);
hold on
subplot(2,2,1), plot(x,y1),title('do thi ham mat do nhieu Gauss');
subplot(2,2,2), plot(z,y2),title('do thi ham mat do nhieu Rayleigh');
subplot(2,2,3), plot(t,y3),title('do thi ham mat do nhieu Gramma');
subplot(2,2,4), plot(t,y4),title('do thi ham mat do nhieu mu');
hold off;
Ví dụ minh họa:
- Ánh bị nhiễu Gauss:
- code Matlab:
a=imread('C:\Matlap7\toolbox\images\imdemos\coins.png');
m=0;
v=0.013;
b=imnoise(a,'Gaussian',m,v);
hold on
subplot(1,2,1),imshow(a),title('anh goc');
subplot(1,2,2),imshow(b),title('anh bi nhieu Gauss');
hold off;
- Ảnh bị nhiễu Poission:
- code Matlab:
a=imread('C:\Matlap7\toolbox\images\imdemos\coins.png');
m=0;
v=0.013;
b=imnoise(a,'poisson');
hold on
subplot(1,2,1),imshow(a),title('anh goc');
subplot(1,2,2),imshow(b),title('anh bi nhieu Poission');
hold off;
- Ảnh bị nhiễu muối tiêu:
- code Matlab:
a=imread('C:\Matlap7\toolbox\images\imdemos\coins.png');
p=0.13;
b=imnoise(a,'salt & pepper',p);
hold on
subplot(1,2,1),imshow(a),title('anh goc');
subplot(1,2,2),imshow(b),title('anh bi nhieu muoi tieu');
hold off;
Khôi phục ảnh bị nhiễu bằng lọc trong miền không gian.
Ảnh ban đầu
a=imread('D:\vidu1.png');
Ảnh (a) được chuyển sang ảnh xám
b=rgb2gray(a);
c.Ảnh (b) bị nhiễu Gauss với mean=0, variant=0.01
c=imnoise(b,'gaussian',0,0.01)
d.Ảnh (c) được lọc bằng phép lọc trung bình số học với mặt nạ 3x3
w=fspecial('average',[3 3]);
d=imfilter(c,w,'replicate');
Hàm changeclass :
function i=changeclass(class,varargin)
switch class
case 'uint8'
i=im2uint8(varargin{:});
case 'uint16'
i=im2uint16(varargin{:});
case 'double'
i=im2double(varargin{:});
otherwise
error('khong hop le');
end
e.Ảnh (c) được lọc bằng phép lọc trung bình hình học với mặt nạ 3x3
inclass=class(c);
c=im2double(c);
warning off;
e=exp(imfilter(log(c),ones(3,3),'replicate')).^(1/3/3);
warning on;
e=changeclass(inclass,e);
imshow(e);
f.Ảnh (b) bị nhiễu muối tiêu với xác suất 0.1
f=imnoise(b,'salt & pepper',0.1);
g.Ảnh (f) được lọc bằng phép lọc trung bình điều hòa với mặt nạ 3x3
inclass= class(f);
f=im2double(f);
g=3*3./imfilter(1./(f+eps),ones(3,3),'replicate');
g=changeclass(inclass,g);
h.Ảnh (f) được lọc bằng phép lọc trung bình không điều hòa với mặt nạ 3x3 và bậc lọc Q=1.
inclass= class(f);
f=im2double(f);
h=imfilter(f.^(1+1),ones(3,3),'replicate');
h=h./(imfilter(f.^(1),ones(3,3),'replicate')+eps);
h=changeclass(inclass,h);
i.Ảnh (f) được lọc bởi phép lọc trung bình không điều hòa với mặt nạ 3x3 và bậc lọc
Q=-1.
inclass= class(f);
f=im2double(f);
i=imfilter(f.^(-1+1),ones(3,3),'replicate');
i=i./(imfilter(f.^(-1),ones(3,3),'replicate')+eps);
i=changeclass(inclass,i);
j.Ảnh (f) được lọc bằng phép lọc median với mặt nạ 3x3
j=medfilt2(f,[3 3],'symmetric');
k.Ảnh(f) được lọc bằng phép lọc giá trị lớn nhất (Max) với mặt nạ 3x3
k=ordfilt2(f,3*3,ones(3,3),'symmetric');
l. Ảnh(f) được lọc bằng phép lọc giá trị nhỏ nhất (Min) với mặt nạ 3x3
l=ordfilt2(f,1,ones(3,3),'symmetric');
m. Ảnh(f) được lọc bằng phép lọc điểm giữa (Midpoint) với mặt nạ 3x3
m1=ordfilt2(f,1,ones(3,3),'symmetric');
m2=ordfilt2(f,3*3,ones(3,3),'symmetric');
m=imlincomb(0.5,m1,0.5,m2);
n.Ảnh(c) được lọc bởi phép lọc trung bình a- thu gọn với mặt nạ 3x3 và d=6
inclass=class(c);
c=im2double(c);
n=imfilter(c,ones(3,3),'symmetric');
for k=1:6/2
n=imsubtract(n,ordfilt2(c,k,ones(3,3),'symmetric'));
end
for k=(3*3-(6/2)+1): 3*3
n=imsubtract(n,ordfilt2(c,k,ones(3,3),'symmetric'));
end
n=n/(3*3-6);
n=changeclass(inclass,n);
o.Ảnh(c) được lọc bởi phép lọc trung vị thích nghi (Adaptive Median Filter) dùng mặt nạ là 3x3 và Smax=7
[M,N]=size(c);
%khoi tao
o=c;
o(:)=0;
init=false(size(c));
%qua trinh loc Smax=7
for k=3:2:7
zmin=ordfilt2(c,1,ones(k,k),'symmetric');
zmax=ordfilt2(c,k*k,ones(k,k),'symmetric');
zmed=medfilt2(c,[k k],'symmetric');
buocB=(zmed>zmin)&(zmax>zmed)& -init;
zB=(c>zmin)&(zmax>g);
xuatzxy=buocB & zB;
xuatzmed=buocB& -zB;
o(xuatzxy)=c(xuatzxy);
o(xuatzmed)=zmed(xuatzmed);
init=init|buocB;
if all(init(:))
break;
end %if
end % for
o(~init)=zmed(~init);
p.Ảnh(c) được lọ bởi phép lọc median với mặt nạ 7x7
p=medfilt2(c,[7 7],'symmetric');
Lọc trong miền tần số:
Lọc bandpass
% bandpass
aerial = imread('E:\PTXLA\THPTXLA\anh\1.bmp');
aerial = imnoise(aerial,'gaussian');
subplot(1,2,1),imshow(aerial),title('anh nhieu gauss');
aerial = double(aerial);
[nx ny] = size(aerial);
nx
ny
u = aerial;
for i = 1:nx
for j = 1:ny
% This is aerial with periodic noise.
u(i,j) = u(i,j) + ...
5.*(1+sin(2*pi*((i-1)/nx)*200))+...
5.*(1+sin(2*pi*((j-1)/ny)*200))+...
5.*(1+cos(2*pi*((i-1)/nx+(j-1)/ny)*141))+...
5.*(1+sin(2*pi*((i-1)/nx-(j-1)/ny)*141));;
end
end
sineaerial = uint8(u);
subplot(1,2,2), imshow(sineaerial),title('anh loc band reject');
Lọc Wiener:
%---Loc wiener---
% tao PSP
LEN = 31;
THETA = 11;
PSF = fspecial('motion',LEN,THETA);
%them nhieu
Blurred = imfilter(b,PSF,'circular','conv');
subplot(2,1,1),imshow(Blurred);title('anh nhoe');
fr=deconvwnr(Blurred,PSF);
subplot(2,1,2),imshow(fr),title('anh loc wiener');
Lọc cưỡng bức bình phương tối thiểu
%---Loc cuong buc binh phuong toi thieu---
a=imread('E:\PTXLA\THPTXLA\anh\1.bmp');
I=rgb2gray(a);
PSF = fspecial('gaussian',7,10);
V = 0.01;
BlurredNoisy = imnoise(imfilter(I,PSF),'gaussian',0,V);
NOISEPOWER = V*prod(size(I));
[J LAGRA] = deconvreg(BlurredNoisy,PSF,NOISEPOWER);
subplot(221); imshow(BlurredNoisy);
title('nhoe va nhieu gauss');
subplot(222); imshow(J);
title('LAGRA');
subplot(223); imshow(deconvreg(BlurredNoisy,PSF,[],LAGRA/10));
title('LAGRA/10');
subplot(224); imshow(deconvreg(BlurredNoisy,PSF,[],LAGRA*10));
title('LAGRA*10');
Báo Cáo Bài Thực Hành Phân Tích Xử Lý Ảnh
Yêu cầu của bài thực hành:
Đọc được điểm số và mã số bảng điểm trong phiếu điểm.
Giới hạn bài toán:
Phiếu điểm được scan sang hình ảnh phải thẳng đứng (không bị nghiêng).
Các phiếu điểm phải cùng một tỉ lệ sau khi scan.
Thuật toán: Các bược thực hiện:
Bước 1: Chuyển ảnh màu về ảnh đen trắng. Phía bên trái của phiếu điểm có một cột gồm nhiều ô vuông hình chữ nhật đen. Ta duyệt theo y qua ảnh phần này ( tọa độ theo x lấy bằng 25) để tìm các điểm chính giữa của hình chữ nhật. Các điểm giữa này tạo cơ sở để tìm phần tô điểm.
Bước 2: Lập một bảng so sánh gồm hoành độ bắt đầu và hoành độ kết thúc của một ô đen trong phần tô điểm và tô mã số bảng điểm.
VD: đây là bảng so sánh cho phần tô điểm.
bangsosanh=[621 637 653 669 687 703 719 737 753 769 787
631 647 663 679 697 713 729 747 763 780 797 ] ;
Bước 3: Lần lượt duyệt qua các điểm giữa đã tính ở bước 1, và bảng so sánh, ta kiểm tra hình chữ nhật tạo bởi điểm giữa và bảng so sánh có nhiều giá trị tô đen ( bằng 0) thì phần tô tròn tương ứng sẽ được tính vào điểm của thí sinh . Làm tương tự cho phần mã số.
Bangsosanh(2,i) -3
Điểm giữa
Bangsosanh(1,i) +3
Mã số của phòng bảng điểm được lưu trong mảng hai chiều MASO[7,11], những vị trí không tô đen thì được gán mặc định là -1. Điểm số của thí sinh được lưu trong mảng DIEM , điểm của thí sinh thứ nhất bắt đầu từ vị trí DIEM(8) . Điểm số được gán mặc định là -1.
Tùy vào mục đích sử dụng, ta sẽ dùng dữ liệu thu được sau khi chạy chương trình.
Kết quả:
Đáp ứng được yêu cầu của bài toán.
Do ta chỉ làm trên những ảnh không bị scan nghiêng nên đối với một số ảnh nghiêng, thuật toán cho kết quả sai. Vì vậy, khi scan phải đặt tấm ảnh cho thật ngay.
Thống kê kết quả đối với một số bảng điểm trên trang web phòng dào tạo:
daiso d
gtham s
hbphuc s
hdtuong d
thongke d
topo d
diemhkltrung_0144 d
diemhkltrung_0145 d
diemhkltrung_0148 d
diemhkltrung_0264 d
diemhkltrung_0269 d
diemhkltrung_0271 s
diemhkltrung_0277 d
diemhkltrung_0282 d
diemhkltrung_0736 d
diemhkltrung_0767 s
diemhkltrung_0772 d
formdiemHK2NVC_0121 s
Các file đính kèm theo tài liệu này:
- BAOCAO.doc
- BÀI THỰC HÀNH PHÂN TÍCH XỬ LÝ ẢNH.ppt