•Phát biểu bài toán: Cho hai ảnh đầu vào đa cấp xám có kích thước bất kỳ, ký hiệu là Img1 và Img2. Ghép hai ảnh này thành một ảnh hoàn chỉnh. Không mất tính tổng quát, ta giả sử hai ảnh này là có thể ghép được và có một phần giống nhau.
•Cách giải quyết:
- Từ hai ảnh đầu vào ta xác định tập các điểm điều khiẻn tương ứng trên mỗi vị trí cần ghép bằng cách sử dụng phương pháp tìm góc của Harris (Harris
corner-detector). Ta gọi các điểm này là các điểm đặc trưng, chúng chia ra làm hai tập điểm đặc trưng:
P={ P1,P2,…,Pn} được xác định trên ảnh thứ nhất Img1. P’={P’1,P’2,...,P’n} được xác định trên ảnh thứ hai Img2.
- Từ hai tập điểm điều khiển trên xây dựng một hàm f ánh xạ một điểm Pi thành điểm P’i qua hàm ƒ. Hàm ƒ có dạng:
( ) ( )
: Pi f Pi
f a
min ) ( ' 1 2 → − ∑ = n i i i f P P
- Sau khi xác định được hàm ƒ ,thực hiện phép ánh xạ với mỗi điểm ảnh Img1(i,j) xác được một điểm ảnh Img1’(i’,j’) ởảnh đích qua hàm ƒ :
- Chồng hai ảnh lên nhau dựa vào các điểm đặc trưng.
•Lưu ý: Nếu ảnh được phân tích là một ảnh màu thì ta chuyển đổi ảnh màu này thành ảnh cấp xám trước khi tiến hành ghép.
•Cài đặt chương trình:
Các tính năng chính:
Chương trình được viết trên ngôn ngữ Visual C++ 6.0, chạy trên hệ điều hành Window XP, máy tính tốc độ 1.5GHz, bộ nhớ 512MB RAM. Chương trình có các chức năng sau:
- Cho phép người sử dụng thao tác lên ảnh bằng một số phép toán cơ bản: chuyển đổi ảnh sang cấp xám, giãn lược đồ cấp xám, chuẩn hoá lược đồ cấp xám, quay ảnh, tìm biên theo phương pháp Sobel, Laplace, v.v ...
- Công cụ ghép ảnh dựa vào nắm chỉnh hình dạng. - Hiển thị kết quả ghép.
KẾT LUẬN
Ảnh số ngày càng dễ sửa chữa và hiệu chỉnh do sức mạnh của các phần mềm soạn thảo và xử lý ảnh. Ngày nay, các chương trình xử lý ảnh có thể tạo ra những hình ảnh đặc biệt cho phim truyền hình (đặc biệt là quảng cáo và phim hoạt hình), những hình ảnh có góc xem rất rộng mà không một máy ảnh nào có thể chụp được. Điều đó có nghĩa việc nghiên cứu các phương pháp ghép ảnh là vấn đề phải đặt ra ngày càng cấp bách và càng trở nên khó khăn.
Ghép ảnh thường chia làm hai loại chính. Loại thứ nhất là ghép ảnh trong, tức là các vùng ảnh được ghép với nhau một cách trong suốt, chúng ta có thể quan sát được tất cả các vùng ảnh của các ảnh ghép. Loại thứ hai là ghép ảnh đục là các phần ghép thêm vào thì che đi các vùng trên ảnh bị ghép.
Trong khuôn khổ hạn chế, luận văn quan tâm đến một số phương pháp ghép ảnh: ghép ảnh dựa vào trộn các điểm ảnh, ghép ảnh dựa vào nắn chỉnh hình dạng, và một phương pháp đang được nghiên cứu nhiều là phương pháp khảm ảnh (image mosaicing) để tạo ra ảnh toàn cảnh (panorama), cụ thể luận văn đã đạt được một số kết quả sau:
• Trình bày tổng quan về một hệ thống xử lý ảnh, các vấn đề cơ bản trong xử lý ảnh, đồng thời trình bày tổng quan về ghép ảnh, cụ thể là các dạng ghép ảnh trong và ghép ảnh đục.
• Chường này trình bày các cơ sở toán học của các phép biến đổi không gian thường được sử dụng trong xử lý ảnh. Đó là các biến đổi xạảnh như: các phép chuyển đổi tuyến tính, chuyển đổi phối cảnh, chuyển đổi song tuyến, chuyển đổi đa thức, …
• Trình bày 3 kỹ thuật ghép ảnh cơ bản: • Ghép ảnh dựa vào trộn các điểm ảnh • Ghép ảnh dựa vào nắn chỉnh hình dạng
• Ghép ảnh bằng phương pháp khảm (mosaicing)
• Cài đặt thử nghiệm một kỹ thuật ghép ảnh đã được trình bày trong chương 3.
• Nghiên cứu các phương pháp ghép ảnh dựa vào nội suy phục vụ trong công tác điều tra tội phạm.
• Nghiên cứu các phương pháp phát hiện ảnh giả mạo do ghép.
• Xây dựng hoàn thiện chương trình ghép ảnh có sử dụng cả 3 phương pháp trình bày trong luận văn.
TÀI LIỆU THAM KHẢO
Tiếng Việt:
[1] Đỗ Năng Toàn, Phạm Việt Bình (2007), “Giáo trình Môn học xử lý ảnh”,
Khoa Công nghệ thông tin, Đại học Thái Nguyên.
[2] Đỗ Năng Toàn, Vũ Đức Thi (2006), “Tổng quan về phát hiện giả mạo trong ảnh kỹ thuật số”, Hội nghị khoa học kỷ niệm 30 năm thành lập Viện Công nghệ thông tin 27-28/12/2006.
[3] Nguyễn Thanh Thủy (2002), “Nhập môn xử lý ảnh số”, Trường Đại học Bách khoa Hà Nội.
Tiếng Anh:
[4] Bruce A. Wallace (1981), Merging and Transformation of Raster Images
for Cartoon Animation, Proc. ACM SIGGRAPH '81, 253-262
[5] David Peter Capel (2001), Image Mosaicing and Super-resolution, Robotics Research Group, Department of Engineering Science, University of Oxford.
[6] Frigo, M., Johnson, S. G., The FFTW Fast Fourier Transform Library, http://www.fftw.org/
[7] George Wolberg (1996), Digital Image Warping, IEEE Computer Society Press Monogragh, 41-92.
[8] Heung-Yeung Shum and Richard Szeliski, Panoramic Image Mosaics, Microsoft Research.
[9] Konstantinos G. Derpanis (2004), The Harris Corner Detector,
kosta@cs.yorku.ca
[10] L. Meunier – M. Borgmann (2000), High-Resolution Using Image
Mosaicing, Stanford University
[11] William K. Pratt (2001), Digital Image Processing: PIKS Inside, Third
PHỤ LỤC
Giải A.x = b bằng phương pháp Gauss
void BuildMatrix(matran XCP, matran X_CP, matran a, vector B[2], int &n) //Xay dung ma tran qua viec danh chi so
{
n=(bac+1)*(bac+2)/2; //Tao mang chi so
BYTE *mang1=new BYTE[n]; BYTE *mang2=new BYTE[n];
int no=bac; int i,j,k; k=0; while(no>=0) { j=0; for(i=no;i>=0;i--) { mang1[k]=i; j=no-1; mang2[k]=j; k++; } no--; }
//Tao xong 2 bang chi so for(i=0;i<n;i++) { for(j=0;j<n;j++) { a[i][j]=0; for(k=0;k<no_of_CP;k++) { int temp1=mang1[i]+mang1[j]; int temp2=mang2[i]+mang2[j]; a[i][j]+=pow(XCP[k][0],temp1)*pow(XCP[k][1],temp2); } } } a[i][j]=no_of_CP; //Tao xong ma tran a
//Tinh B[0] for(i=0;i<n;i++) { B[0][i]=0; for(k=0;k<no_of_CP;k++) B[0][i]+=pow(XCP[k][0],mang1[i])*pow(XCP[k][1],mang2*x_CP[k][0] ; } //Tinh B[1] for(i=0;i<n;i++) { B[1][i]=0; for(k=0;k<no_of_CP;k++) B[1][i]+=pow(XCP[k][0],mang1[i])*pow(XCP[k][1],mang2*x_CP[k][1] ;
} }
/****************************************************/ int Gauss_solve(matran A, int N,vector x)
{
//Dau vao ma tran A, N //Dau ra: vector x
int i,j,t,k;
double tmp,tmp1,tmp2,scale;
/*Chuyen ma tran A thanh ma tran tam giac*/ for(i=0;i<N;i++) { j=1; tmp1=A[i][i]; for(k=i;k<N;k++) if(fabs(A[k][i])>fabs(A[i][j])) j=k; if(A[j][i]==0) return 0; if(j!=i) { for(t=0;t<=N-1;t++) { tmp1=A[i][t]; A[i][t]=A[j][t]; A[j][t]=tmp1; } tmp2=x[i];x[i]=x[j];x[j]=tmp2; } for(j=i+1;j<N;j++) { scale=0; if(A[j][i]!=0) { scale=A[j][i]/A[i][i]; for(t=i;t<=N-1;t++) A[j][t]=A[j][t]-scale*A[i][t]; } x[j]=x[j]-x[i]*scale; } }
/*Giai he phuong trinh Ax=b*/ for(i=N-1;i>=0;i--) { tmp=0; for(j=i+1;j<N;j++) tmp=tmp+A[i][j]*x[j]; tmp=x[i]-tmp; x[i]=tmp/A[i][i]; } return 1; }