Chương trình và kết quả

Một phần của tài liệu Nghiên cứu các kỹ thuật dò biên áp dụng trong trích chọn các bộ phận khuôn mặt (Trang 30 - 36)

Chương trình gồm 10 file mã. Trong đó gồm có 3 file đưa ra hàm Gauss nhằm mục đích làm trơn ảnh, đạo hàm của hàm Gauss, và hàm biến đổi hệ số của ma trận ảnh. Sau đó là 7 file chứa các phương pháp lấy biên của bức ảnh khuôn mặt. Trong đó có 5 file chứa 5 kỹ thuật phát hiện biên, một file show tất cả 5 phương pháp để có sự so sánh, một file thể hiện ảnh đa cấp xám, ảnh biến đổi từ ảnh gốc. Sau đây là chương trình cụ thể:

Hàm Gauss với file gauss.m: function y = gauss(x,std)

y = exp(-x^2/(2*std^2)) / (std*sqrt(2*pi));

Hàm dgauss là đạo hàm của hàm gauss được nêu ra ở trên với file dgauss.m: function y = dgauss(x,std)

y = -x * gauss(x,std) / std^2;

Hàm d2dgauss là hàm biến đổi lấy biên ra biên 2D qua các phép biến đổi các hệ số của ma trận ảnh đầu vào: function h = d2dgauss(n1,sigma1,n2,sigma2,theta) r=[cos(theta) -sin(theta); sin(theta) cos(theta)]; for i = 1 : n2 for j = 1 : n1 u = r * [j-(n1+1)/2 i-(n2+1)/2]'; h(i,j) = gauss(u(1),sigma1)*dgauss(u(2),sigma2); end end h = h / sqrt(sum(sum(abs(h).*abs(h))));

Với các tham số ban đầu được định nghĩa như sau:

Huong theo truc X:

Nx1=10;Sigmax1=1;Nx2=10;Sigmax2=1;Theta1=pi/2;

Huong theo truc Y:

Ny1=10;Sigmay1=1;Ny2=10;Sigmay2=1;Theta2=0;

Sau đó bức ảnh chân dung sẽ được xử lý chuyển sang dạng ảnh đa cấp xám:

[x,map]=imread('chandung.gif'); w=ind2gray(x,map);

figure(1);colormap(gray);

Ảnh này sẽ được hiển thị trên một cửa sổ thông qua lệng figure(1), và colormap(gray) hàm set và get màu hiện tại cho bản đồ màu. Và sau với bức ảnh đầu vào ta có bức ảnh đa cấp xám:

Ảnh đầu vào Ảnh đa cấp xám H3.3 Biến thành ảnh đa cấp xám

3.2.1 Lấy biên theo trục X

Quy trình lấy biên theo trục X sẽ được thực hiện bởi đoạn mã sau:

subplot(1,1,1);

filterx=d2dgauss(Nx1,Sigmax1,Nx2,Sigmax2,Theta1); Ix= conv2(w,filterx,'same');

imagesc(Ix); title('Ix');

Biên lấy theo trục X sẽ được hiển thị qua cửa sổ thứ nhất với kích cỡ cửa sổ 1x1 thông qua hàm subplot(1,1,1), thông qua hàm d2dgauss với những tham số chuẩn được đưa ra phương pháp lọc biên theo trục X sẽ được thực hiện và tiếp là hàm trả lại phần trung của 2 phần giao nhau thông qua hàm conv2(w,filterx,’same’), cuối cùng nội dung sẽ được hiển thị thông qua imagesc(Ix) với tiêu đề là title(‘Ix’). Và kết quả được hiển thị:

Đa cấp xám Biên theo trục X H3.4 Lấy theo trục X

3.2.2 Lấy biên theo trục Y

Quy trình lấy biên theo trục Y sẽ được thực hiện bởi đoạn mã sau:

subplot(1,1,1)

filtery=d2dgauss(Ny1,Sigmay1,Ny2,Sigmay2,Theta2); Iy=conv2(w,filtery,'same');

imagesc(Iy); title('Iy');

Biên lấy theo trục X sẽ được hiển thị qua cửa sổ thứ nhất với kích cỡ cửa sổ 1x1 thông qua hàm subplot(1,1,1), thông qua hàm d2dgauss với những tham số chuẩn được đưa ra phương pháp lọc biên theo trục Y sẽ được thực hiện và tiếp là hàm trả lại phần trung của 2 phần giao nhau thông qua hàm conv2(w,filtery,’same’), cuối cùng nội dung sẽ được hiển thị thông qua

Đa cấp xám Biên theo trục Y (adsbygoogle = window.adsbygoogle || []).push({});

H3.5 Biến đổi theo trục Y

3.2.3 Lấy biên theo Gradient

Phương pháp Gradient là phương pháp lấy biên trực tiếp với sự kết hợp 2 phương pháp lấy biên theo trục X và trục Y ở trên. Hệ số Gradient sẽ được định nghĩa theo đường độ dài đường chéo hình chữ nhật với 2 cạnh là 2 tham số Ix và Iy. Và hàm được định nghĩa như sau:

Loc theo phuong phap Gradient(Ket hop loc theo truc X va Y)

subplot(1,1,1);

NVI=sqrt(Ix.*Ix+Iy.*Iy); imagesc(NVI);

title('Norm of Gradient');

Và kết quả nhận được theo phương pháp này:

Biên theo Gradient

H3.6 Biến đổi theo Gradient

Biến đổi theo trục Y

3.2.4 Lấy biên theo Thresholding

Phương pháp Thresholding là phương pháp lọc theo ngưỡng và trong trường hợp này thì nhưng hệ số ma trận Gradient mà cao hơn ngưỡng thì sẽ được giữ lại và hiển thị, đoạn mã như sau: I_max=max(max(NVI)); I_min=min(min(NVI)); level=alfa*(I_max-I_min)+I_min;(*) subplot(1,1,1); Ibw=max(NVI,level.*ones(size(NVI))); imagesc(Ibw);

title('After Thresholding');

Ở đây các hệ số lớn nhất của ma trận sẽ được tính, sau đó level(ngưỡng) sẽ được tính theo công thức (*), sau đó các hệ số của ma trận sẽ được so sánh với ngưỡng này và được chọn và hiển thị hay còn gọi là phương pháp Thresholding, kết quả như sau:

Biên theo Gradient Biên theo Thresholding H3.7 Biến đổi theo Thresholding

3.2.5 Lấy biên theo Thinning

Phương pháp Thinning là phức tạp hơn cả, phương pháp sử dụng hàm nội suy ma trận với các ma trận 0,1 và các ma trận các hệ số của thresholding, ma trận hệ số theo trục X chia cho hệ số Gradient, và hệ số trục Y trên hệ số Gradient. Được nội suy thông qua hàm

interp2() và sau đó ta sẽ so sánh các hệ số của ma trận nội suy với các hệ số của ma trận thresholding, các hệ số sẽ được chọn và hình thành ma trận mới, cụ thế chương trình như sau:

subplot(1,1,1); [n,m]=size(Ibw); for i=2:n-1, for j=2:m-1, if Ibw(i,j) > level, X=[-1,0,+1;-1,0,+1;-1,0,+1];

Z=[Ibw(i-1,j-1),Ibw(i-1,j),Ibw(i-1,j+1); Ibw(i,j-1),Ibw(i,j),Ibw(i,j+1); Ibw(i+1,j-1),Ibw(i+1,j),Ibw(i+1,j+1)]; XI=[Ix(i,j)/NVI(i,j), -Ix(i,j)/NVI(i,j)]; YI=[Iy(i,j)/NVI(i,j), -Iy(i,j)/NVI(i,j)]; ZI=interp2(X,Y,Z,XI,YI);

if Ibw(i,j) >= ZI(1) & Ibw(i,j) >= ZI(2) I_temp(i,j)=I_max; else I_temp(i,j)=I_min; end else I_temp(i,j)=I_min; end end end imagesc(I_temp); title('After Thinning');

Sau đây là kết quả chương trình trên:

Biên theo Thresholding Biên theo Thinning H3.8 Biến đổi theo Thinning

3.3 Tổng kết

Với việc sử dụng hàm Gauss hai chiều để tạo hiệu ứng mờ Gauss và được sử dụng để làm trơn để xây dựng các hàm wavelet ứng dụng cho việc xác định biên, cụ thể trong chương trình này ta dùng phương pháp Gradient và sau đó sử dụng thêm các phương pháp được phát triển lên thêm theo phương pháp Thresholding và Thinning ta đã thu được những đường biên khác nhau và hiệu quả đã được tăng dần theo từng phương pháp. Điều này sẽ được thể hiện rõ nét hơn khi được thể hiện qua hình dưới:

H3.9 Quy trình biến đổi lấy biên theo thinning

Ta thấy biên được tách biệt một cách rõ ràng hơn khi qua phươg pháp Thinning. Với việc lọc biên như thế sẽ rất hiểu quả trong việc trích chọn các đặc trưng khuôn mặt, từ đó giúp cho việc nhận dạng khuôn mặt sẽ dễ dàng hơn.

Chương 4. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

(adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Nghiên cứu các kỹ thuật dò biên áp dụng trong trích chọn các bộ phận khuôn mặt (Trang 30 - 36)