Khối đọc và thao tác ảnh

Một phần của tài liệu 27887 (Trang 41)

3. Bố cục của luận văn

3.2.1.1. Khối đọc và thao tác ảnh

Để đọc và thao tác đƣợc với ảnh, em sử dụng thƣ viện mã nguồn mở: fipWinImage. Để sử dụng thƣ viện này ta phải đăng kí tên thƣ viện

FreeImagePlus.libFreeImaged.lib trong phần Resource Files,và đăng kí

FreeImagePlus trong phần Header Files.

Khai báo biến ảnh image_origin thuộc thƣ viện fipWinImage theo kiểu con trỏ để thao tác ảnh và ảnh này bằng một giá trị mới trong lớp fipWinImage.

fipWinImage = *image_origin image_origin= new fipWinImage() - Hàm thực hiện đọc ảnh với đƣờng dẫn là sFile:

image_origin->load(sFile,JPEG_QUALITYSUPERB) - Một số định dạng ảnh mà fipWinImage hỗ trợ.

Định dạng BMP: Đây là định dạng thƣờng gặp nhất trong các file ảnh

Định dạng JPG: Là định dạng nén, file ảnh đƣợc lƣu dƣới định dạng này thƣờng có dung lƣợng nhỏ, thƣờng đƣợc dùng trong công việc thiết kế trang Web.

Định dạng GIF: Là định dạng của các file ảnh động. ……….

3.2.1.2. Khối thực hiện biến đổi hình dạng ảnh dựa trên các điểm đặc trưng

3.2.1.2.1. Hàm tính tọa độ Barycentric của M đối với ba điểm P1, P2, P3

Mục đích: Với mỗi điểm ảnh M ta sẽ tính toán giá trị tọa độ theo hệ tọa độ Barycentric đối với ba điểm P1, P2, P3.

Ý tưởng: Dựa vào công thức tính tọa độ Barycentric để xây dựng hàm. Hàm này trả về giá trị tọa độ u, v, w của điểm M.

BOOL CThuView::Barycentric(CPoint M, CPoint P1, CPoint P2, CPoint P3, double &u, double &v, double &w)

{

double D= double ((P1.y- P3.y) *( P1.x - P2.x)- (P1.x- P3.x)*(P1.y-P2.y)); if (D= =0) return FALSE; v=((P1.y-P3.y)*(P1.x-M.x)-(P1.x-P3.x)*(P1.y-M.y))/D; w=((P1.y-M.y)*(P1.x-P2.x)-(P1.x-M.x)*(P1.y-P2.y))/D; u=1-v-w; return TRUE; }

3.2.12.2. Hàm kiểm tra ba điểm A, B, C có chứa điểm P hay không? Mục đích: Kiểm tra tam giác ABC có chứa điểm P hay không?

Ý tưởng: Dùng con trỏ Cpoint để khai báo cho các điểm P, A, B, C. Để thực hiện kiểm tra thì phải xét tọa độ P.x và P.y của điểm P có nằm trong các khoảng tọa độ tƣơng ứng theo x, y của A, B, C hay không? Nếu tọa độ P.x và P.y nhỏ hơn hoặc lớn hơn A.x, B.x, C.x hoặc A.y, B.y, C.y thì tam giác ABC không chứa P.

Lưu ý: Khi kiểm tra 3 điểm A, B, C đã chứa điểm P thì hàm này gọi luôn hàm tính tọa độ Barycentric để kiểm tra điều kiện tồn tại của tọa độ này. Đó là, tọa độ theo u, v, w  0.

BOOL CThuView:: IsBeLongToTraingle(CPoint P, CPoint A, Cpoint B, CPoint C)

double u,v,w;

if ((P.x > A.x && P.x > B.x && P.x > C.x)|| (P.x < A.x && P.x < B.x && P.x < C.x) || (P.y > A.y && P.y > B.y && P.y > C.y) || (P.y < A.y && P.y < B.y && P.y < C.y)) return FALSE;

if ( Barycentric(P,A,B,C,u,v,w)&& u>=0&& v>=0&& w>=0) return TRUE;

return FALSE; }

3.2.1.2.3. Hàm tính khoảng cách giữa hai điểm P và Q

Mục đích: Tính khoảng cách giữa hai điểm ảnh p, q. Hàm này đƣợc sử dụng để tìm ba điểm đặc trƣng.

Ý tưởng: Dựa theo công thức toán học:

Khoảng cách(p,q)= 2 2

) (

)

(xpxqypyq

Tuy nhiên, do đặc thù của thuật toán đƣợc xây dựng, hàm này chỉ đƣợc sử dụng để tìm 3 điểm lân cận với M, có tổng khoảng cách đến M nhỏ nhất nên để giảm khối lƣợng các phép tính, hàm chỉ xây dựng theo công thức sau:

Khoảngcách(p,q) = (xp – xq)2 + (yp - yq)2

double CThuView::Khoangcach(CPoint p, CPoint q) {

return ((p.x-q.x) * (p.x-q.x) + (p.y-q.y) * (p.y-q.y)); }

3.2.1.2.4. Hàm tìm tập điểm đặc trưng trên ảnh trung gian.

Mục đích: Tìm tập điểm đặc trƣng trên ảnh trung gian dựa theo tập điểm đặc trƣng đã đƣợc chọn trên ảnh gốc và ảnh đích.

Ý tưởng: Dựa vào công thức tính tọa độ của điểm đặc trƣng trung gian khi biết tọa độ của của cặp điểm đặc trƣng tƣơng ứng trên hai ảnh và một hệ số r[0,1].

void CThuView::TapdiemDTtrunggian(double r, CPoint *P, int n) {

lMin=1000; rMax=0; tMin=1000; bMax=0;

for(int i=1; i<=n; ++i) {

P[i].x= int (DT11[i].x *(1-r) + DT22[i].x * r); P[i].y= int (DT11[i].y *(1-r) + DT22[i].y * r); if(P[i].x>rMax)rMax = P[i].x; if(P[i].x<lMin)lMin = P[i].x; if(P[i].y>bMax)bMax = P[i].y; if(P[i].y<tMin)tMin = P[i].y; } } 3.2.1.2.5. Hàm tìm ba điểm đặc trưng

Mục đích: Tìm 3 điểm đặc trƣng của điểm ảnh M bất kỳ trên ảnh trung gian. Ba điểm đặc trƣng này có chỉ số tƣơng ứng với các điểm đặc trƣng trên ảnh gốc và ảnh đích. Từ đó, ta có thể tính đƣợc tọa độ Barycentric của M1, M2 tƣơng ứng với M trên ảnh gốc và đích.

Ý tưởng: Tìm ba điểm đặc trƣng chứa M (theo hàm IsToBeLongToTriang) mà có khoảng cách đến M nhỏ nhất và bé hơn một ngƣỡng.

BOOL CThuView::Tim3diemDT(CPoint M, int &a, int &b, int &c) {

double h;

BOOL timthay = FALSE; int u,v,k; int dem=0; for (u=1;u<=ndiemDT;++u) { for (v=1;v<=ndiemDT;++v) if(v!=u) { for (k=1;k<=ndiemDT;++k) if(k!=u && k!=v) { if (IsBeLongToTraingle(M,DT[u],DT[v],DT[k])==TRUE) { h=Khoangcach(M,DT[u])+Khoangcach(M,DT[v])+Khoangca ch(M,DT[k]); if (h<nguong) { nguong = h; a=u; b=v; c=k; timthay=TRUE; ++dem; } } }

} }

return timthay; }

3.2.1.2.6. Hàm thực hiện nội suy ảnh.

Mục đích: Từ hai ảnh đầu vào tạo ra ảnh trung gian theo mong muốn.Ví dụ: Từ hai ảnh đầu vào lúc 10 tuổi và lúc 50 tuổi của cùng một ngƣời, ta lấy ra ảnh của ngƣời đó lúc 30 tuổi, 40 tuổi,…

Ý tưởng: Với mỗi điểm M trên ảnh trung gian, tìm 3 điểm đặc trƣng của M và tính toán tọa độ Barycentric của nó. Sau đó tính tọa độ của các điểm ảnh M1, M2 trên ảnh gốc và ảnh đích có cùng tọa độ Barycentric với M và gán giá trị màu của điểm M theo giá trị màu của M1, M2(theo những công thức đã đƣợc xây dựng trong phần thuật toán)

void CThuView::Noisuy(double r) {

CThuDoc *pDoc = (CThuDoc *)GetDocument(); fipWinImage *pImg1 = pDoc->image_origin1; fipWinImage *pImg2 = pDoc->image_origin2; fipWinImage *pImg = pDoc->image_final; int a, b, c; CPoint A, B, C; double x1, x2, x3; CPoint M, M1, M2; double u, v, w; TapdiemDTtrunggian(r, DT, ndiemDT); RGBQUAD rgb1, rgb2, rgb;

for (int i=1; i<iH; ++i) for (int j=1; j<iW; ++j)

{ M.x=iH-i-1; M.y=j; If(IsInRect(M.x,M.y,lMin,tMin,rMax,bMax)&& Tim3diemDT(M,a,b,c)) { if (Barycentric(M,DT[a],DT[b],DT[c],u,v,w)) { x1=u; x2=v; x3=w; M1.x= int(DT11[a].x*x1+DT11[b].x*x2 + DT11[c].x*x3); M1.y=int(DT11[a].y*x1+DT11[b].y* x2 + DT11[c].y*x3); M2.x=int(DT22[a].x*x1+DT22[b].x* x2 + DT22[c].x*x3); M2.y=int(DT22[a].y*x1+DT22[b].y* x2 + DT22[c].y*x3); // Noi suy mau sac

pImg1->getPixelColor(M1.y,M1.x,&rgb2); pImg2->getPixelColor(M2.y,M2.x,&rgb1);

rgb.rgbRed=(BYTE)(rgb1.rgbRed*r + rgb2.rgbRed*(1-r)); rgb.rgbGreen=(BYTE)(rgb1.rgbGreen*r+rgb2.rgbGreen*(1-r)); rgb.rgbBlue = (BYTE)(rgb1.rgbBlue*r + rgb2.rgbBlue*(1-r)); pImg->setPixelColor(M.y,M.x,&rgb); } } } Invalidate(); }

Mục đích: Hỗ trợ ngƣời dùng có thể lƣu lại tập các điểm đặc trƣng đã chọn trên hai ảnh đầu vào, để có thể sử dụng ở lần nội suy tiếp theo.

Ý tưởng: Khai báo một file f để mở tệp data.txt để đƣa lần lƣợt các điểm đặc trƣng trong tập đặc trƣng vào file.

void CThuView::OnButtonLuu() { CFile f; f.Open("data.txt",CFile::modeCreate|CFile::modeWrite); CArchive ar(&f,CArchive::store); ar<< ndiemDT; for(int i=1;i<=ndiemDT;++i)

ar << DT1[i].x << DT1[i].y << DT2[i].x << DT2[i].y; ar.Close();

f.Close(); }

3.2.1.2.8. Hàm đọc tập các điểm đặc trưng.

Mục đích: Hỗ trợ ngƣời dùng có thể đọc đƣợc tập điểm đặc trƣng đã lƣu trên file.

Ý tưởng: Mở file có tên là data.txt để đọc lần lƣợt từng điểm đặc trƣng có trên file. Đồng thời hiện tập đặc trƣng lên hai ảnh và trong danh sách tọa độ bên phải. void CThuView::OnButtonDoc() { CFile f; f.Open("data.txt",CFile::modeRead); CArchive ar(&f,CArchive::load); ar>>ndiemDT; for(int i=1;i<=ndiemDT;++i)

ar >> DT1[i].x >> DT1[i].y >> DT2[i].x >> DT2[i].y; CMainFrame *frm =(CMainFrame *) GetParentFrame(); CRightView *pView = frm->getRightView();

int x,y; for(i=1;i<=ndiemDT;++i) { DT11[i]=DT1[i]; DT22[i] = DT2[i]; x = DT11[i].x; y = DT11[i].y; DT11[i].x = (iH-y-1); DT11[i].y = x; x = DT22[i].x; y = DT22[i].y; DT22[i].x = (iH-y-1); DT22[i].y = x; pView->ThemToaDo(DT1[i].x,DT1[i].y,DT2[i].x,DT2[i].y); } ar.Close(); f.Close(); Invalidate(); }

3.2.1.3. Khối hiển thị kết quả ảnh

Việc hiển thị kết quả ảnh đƣợc thực hiện trong hàm OnDraw, hàm sử dụng con trỏ tới lớp CthuDocument: pDoc để lấy kích thƣớc ảnh và vẽ lại ảnh trên vùng đƣợc khai báo bởi khối hình chữ nhật: rc. Mỗi khi thực hiện nội suy ra các ảnh trung gian, thì ảnh mới sẽ đƣợc vẽ chồng lên vị trí của ảnh cũ. Vì vậy, để có thể

nhìn thấy kết quả ảnh mới đƣợc rõ nét thì mỗi lần gọi hàm nội suy ta phải xóa ảnh cũ trên vùng đó.

3.2.2. Giao diện chƣơng trình.

3.2.2.1. Giao diện chính của chương trình

3.2.2.2. Giao diện khi tiếp nhận một ảnh đầu vào

3.2.2.3. Giao diện khi tiếp nhận hai ảnh đầu vào

Hình 3.2.2.1. Giao diện chính của chƣơng trình

3.2.2.4. Giao diện khi đọc các điểm đặc trưng từ tệp

Đọc các điểm đặc trƣng từ tệp: Bấm nút “Đọc ĐT” trên thanh công cụ

3.2.2.5. Giao diện thực hiện nội suy khôi phục hình dạng ảnh

Thực hiện nội suy biến đổi khôi phục hình dạng ảnh : + Bƣớc 1: Nhập hệ số biến đổi.

+ Bƣớc 2: Xử lý biến đổi ảnh, chƣơng trình xử lý trung bình 10s cho một lần biến đổi :

Với các hệ số biến đổi r khác nhau ta có các kết quả ảnh đƣợc khôi phục ở từng thời điểm khác nhau.

Hình 3.2.2.3. a- Giao diện khi thực hiện nội suy khôi phục ảnh nhập r

3.2.3. Kết quả chạy thử nghiệm

Để đánh giá đƣợc kết quả của chƣơng trình ShapeWarp, em đã đƣa ra 2 dạng kiểm tra chính nhƣ sau:

 Tiếp nhận hai ảnh đầu vào của cùng một ngƣời nhƣng ở hai giai đoạn, hai lứa tuổi khác nhau. Yêu cầu tạo ra ảnh trung gian theo độ tuổi giữa hai giai đoạn đó.

 Tiếp nhận hai ảnh đầu vào nhƣng thuộc hai ngƣời khác nhau, có thể cùng độ tuổi hoặc không cùng độ tuổi. Yêu cầu tạo ảnh trung gian khi trộn hai khuôn mặt đó với nhau.

Với những dạng kiểm tra trên chƣơng trình ShapeWarp đã thực hiện trên nhiều bộ ảnh khác nhau và đạt kết quả tƣơng đối tốt.

Tiếp nhận hai ảnh đầu vào của cùng một ngƣời nhƣng ở hai giai đoạn, hai lứa tuổi khác nhau. Yêu cầu tạo ra ảnh trung gian theo độ tuổi giữa hai giai đoạn đó.

Tốc độ tạo ảnh theo chiều tăng dần của lứa tuổi là : 35s, 34s, 33s.

3.2.3.2. Bộ ảnh của bác Lộng lúc 35 tuổi và lúc 65 tuổi.

Tốc độ tạo ảnh theo chiều tăng dần của lứa tuổi là:121s, 111s, 101s.

3.2.3.3. Bộ ảnh của một người Nhật lúc 7 tuổi và lúc 45 tuổi.

Tốc độ tạo ảnh trong ba độ tuổi đều là 48s.

Hình 3.2.3.2. Ảnh kết quả của bác Lộng

Phần 3: PHẦN KẾT LUẬN

1. Các kết quả đạt đƣợc

Hiểu và nắm rõ đƣợc kỹ thuật nắn chỉnh ảnh, nội suy ảnh, các kỹ thuật trộn – pha màu để từ đó thực hiện việc khôi phục hình dạng ảnh nhằm tạo ra các góc độ khác nhau của khuôn mặt trên ảnh gốc.

Thực chất của biến đổi ảnh là thực hiện biến đổi hình học giữa hai ảnh nguồn và ảnh đích. Sự biến đổi này định nghĩa mối quan hệ giữa các điểm ảnh nguồn và điểm ảnh đích, ta gọi là tập các điểm đặc trƣng trên ảnh nguồn và ảnh đích. Mối quan hệ giữa các điểm ảnh này đƣợc xác định bằng các hàm toán học và sử dụng tọa độ Barycentric trong việc nội suy ra các điểm ảnh.

Cuối cùng, để minh họa cho các kết quả nghiên cứu, em sẽ xây dựng một chƣơng trình khôi phục hình dạng ảnh (đối tƣợng là khuôn mặt ngƣời) thông qua các kỹ thuật nắn chỉnh ảnh, nội suy ảnh, các kỹ thuật trộng – pha màu với đầu vào là một ảnh chứa khuôn mặt và ảnh đích là các ảnh của khuôn mặt đó ở các góc độ khác nhau.

2. Hƣớng phát triển của đề tài

Sau khi nghiên cứu, tìm hiểu các kỹ thuật khôi phục hình dạng ảnh (đối tƣợng là khuôn mặt ngƣời) hiện tại và xây dựng ứng dụng thử nghiệm sử dụng một trong các kỹ thuật này, chúng ta có thể xây dựng thêm các kỹ thuật khôi phục hình dạng ảnh khác có chất lƣợng ảnh tốt hơn,…Cụ thể, một nhƣợc điểm của thuật toán này là cần có sự tƣơng tác của ngƣời sử dụng trong việc xác định tập các điểm đặc trƣng trên ảnh gốc và ảnh đích. Đây là nhƣợc điểm chung khi sử dụng các thuật toán bóp méo, nắn chỉnh ảnh truyền thống. Bên cạnh đó, tốc độ thực hiện của thuật toán chƣa nhanh nếu số điểm đặc trƣng lớn và kết quả không đạt chính xác cao nếu việc chọn các cặp điểm đặc trƣng là không chính xác.

Với những nhƣợc điểm ở trên, trong tƣơng lai em đang tiến tới xây dựng một thuật toán dùng để khôi phục ảnh mà cần ít tƣơng tác của ngƣời sử dụng trong việc xác định tập các điểm đặc trƣng và cải thiện đƣợc tốc độ chạy ứng dụng cao hơn nữa.

TÀI LIỆU THAM KHẢO

[1]. PTS Nguyễn Ngọc Kỷ, Bài giảng xử lý ảnh cho cao học Tin học ĐHBK Hà Nội, Hà nội 1997.

[2]. Lƣơng Mạnh Bá, Nguyễn Thanh Thủy, Nhập môn xử lý ảnh số, Nhà xuất bản Khoa học và kỹ thuật Hà Nội, Hà Nội 2003.

[3]. PGS.TS Đỗ Năng Toàn, TS Phạm Việt Bình, Giáo trình môn học Xử lý ảnh,

Khoa CNTT, Đai học Thái Nguyên, Thái Nguyên 2007.

[4]. Một số vấn đề chọn lọc của công nghệ thông tin, Nhà xuất bản Khoa học và kỹ thuật Hà Nội, Hà Nội 2006.

[5]. Anil.K.Jain. Prentice Fundamentls of Digital Image Processing, Năm 1986. [6]. “Digital Image Processing Algorithms”, Joannnis, Prentice Hall, 1995. [7]. http://www.web.forret.com/fools/color.asp

NHẬN XÉT CỦA GIÁO VIÊN HƢỚNG DẪN ... ... ... ... ... ... ... ... ... ... ...

... ... ... ... ... ... ... ... ... ...

Một phần của tài liệu 27887 (Trang 41)

Tải bản đầy đủ (PDF)

(58 trang)