CHƯƠNG TRÌNH ỨNG DỤNG

18 678 2
CHƯƠNG TRÌNH ỨNG DỤNG

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Phần CHƯƠNG TRÌNH ỨNG DỤNG 1.1 Giới thiệu Phần trình bày khái qt vai trị tầm quan trọng biên trình xử lý ảnh Đồng thời, phần trình bày khái niệm biên ảnh phương pháp dò biên ảnh nhị phân máy tính Để áp dụng lý thuyết trình bày phần 1, Phần giới thiệu chương trình ứng dụng tìm biên ảnh Chương trình áp dụng kỹ thuật biên trực tiếp kỹ thuật Gradient Laplace Trong kỹ thuật Gradient, toán tử Sobel Prewitt sử dụng Tiếp chương trình giới thiệu phương pháp dị biên gián tiếp thơng qua việc phân vùng ảnh Chương trình viết ngơn ngữ Visual C++ 6.0 1.2 Các chức chương trình Chương trình bao gồm chức sau:  Đọc ảnh nhị phân: ảnh đen trắng, ảnh màu (16 màu 256 màu) dạng bitmap (*.bmp)  Lưu ảnh: lưu ảnh biến đổi file  Dò biên ảnh bao gồm chức sau o Theo kỹ thuật Gradient: cách sử dụng toán tử Sobel Prewitt o Theo kỹ thuật Laplace: sử dụng tốn tử Laplace-H2 o Dị biên gián phân vùng ảnh: dò biên theo màu ảnh 1.3 Chi tiết chức dò biên thuật tốn 1.3.1 Dị biên theo kỹ thuật Gradient Theo phần lý thuyết trình bày, kỹ thuật Gradient dò biên theo hướng x y cách sử dụng hai mặt nạ nhân chập theo hai hướng Chương trình sử dụng hai tốn tử Sobel Prewitt sau -1 H1 = -1 -1 -1 -1 H2 = -1 Ngang (hướng x) 0 1 Dọc(hướng y) a) mặt nạ Sobel Tiểu luận môn xử lý ảnh - Biên phương pháp dò biên -1 H1 = -2 -1 -2 -1 H2 = Ngang (hướng x) 0 -1 Dọc(hướng y) b) mặt nạ Prewitt Giả sử Gx Gy ma trận điểm ảnh thu sau nhân chập với mặt nạ theo hai hướng tương ứng Ma trận điểm ảnh G tính xấp xỉ theo cơng thức sau: G=|Gx| + |Gy|  Thuật tốn dị biên theo phương pháp Gradient sau: Đầu vào: ma trận ảnh cần tìm biên: mặt nạ I1 I2 Đầu ra: Một ma trận ảnh (chứa đường biên tìm thấy) Giải thuật // Gradient Algorithm For (mỗi điểm ảnh ảnh) if(Nếu điểm ảnh nẳm đường viền ảnh) Gán giá trị điểm ảnh đường viền ảnh =0 (hoặc màu ảnh) else { - Tính xấp xỉ Gradient theo chiều x (Gx): nhân chập với mặt nạ I1 -Tính xấp xỉ Gradient theo chiều y (Gy): nhân chập với mặt nạ I2 -Tính giá trị điểm ảnh theo công thức xấp xỉ G: G=|Gx|+ |Gy| - Nếu giá trị điểm ảnh lớn số màu ảnh gán giá trị ảnh giá trị màu lớn } Để dễ hiểu, phần minh hoạ thêm giải thuật này: Trang 2/18 Tiểu luận môn xử lý ảnh - Biên phương pháp dò biên Ma trận ảnh vào Mặt nạ a11 a12 a13 a1n a21 a22 a23 m11 a2n m12 m13 a31 a32 a33 m21 m22 a3n m23 m31 m32 m33 Ma trận ảnh sau nhân chập b12 b13 b1n b21 b22 b23 b2n b31 b11 b32 b33 b3n Trong đó: b22=(a11*m11)+ (a12*m12)+ (a12*m13)+ (a21*m21) (a23*m23) + (a31*m31)+ (a32*m32)+ (a33*m33) + (a22*m22) + Các giá trị nằm đường viền gán =0 (hay giá trị màu nền) (b11,b12, b1n,b11 bn1,b1n bnn, bn1 bnn) Đây công thức tính Gx Gy Để tính giá trị điểm ảnh đầu ra, sử dụng công thức: G=|Gx|+ |Gy| 1.3.2 Phương pháp dò biên theo kỹ thuật Laplace Kỹ thuật Laplace dị biên theo cách tính xấp xỉ đạo hàm bậc hai dựa mặt nạ Chương trình sử dụng mặt nạ H2 cách dò biên theo kỹ thuật Laplace -1 Trang 3/18 -1 -1 -1 -1 H2= -1 -1 -1 Tiểu luận môn xử lý ảnh - Biên phương pháp dò biên Gọi G ma trận điểm thu sau nhân chập ma trận điểm ảnh (của ảnh cần tìm biên)với mặt nạ H2 G ma trận điểm ảnh chứa đường biên cần tìm  Thuật tốn dị biên theo phương pháp Gradient sau: Đầu vào: ma trận ảnh cần tìm biên: mặt nạ H2 Đầu ra: Một ma trận ảnh (chứa đường biên tìm thấy) Giải thuật // Laplace Algorithm For (mỗi điểm ảnh ảnh) if(Nếu điểm ảnh nẳm đường viền ảnh) Gán giá trị điểm ảnh đường viền ảnh =0 (hoặc màu ảnh) else { - Tính xấp xỉ Laplace G: nhân chập với mặt nạ I1 - Nếu giá trị điểm ảnh lớn số màu ảnh gán giá trị ảnh giá trị màu lớn } 1.3.3 Phương pháp dò biên gián tiếp Dựa kỹ thuật phân vùng ảnh, Phương pháp dò biên theo thay đổi mức xám màu ảnh Nếu điểm ảnh có màu có màu khác khoảng cách màu nằm phạm vi cho phép, đồng thời nằm kề tạo thành vùng  Định nghĩa khoảng cách màu: Khoảng cách màu khái niệm để khác giá trị màu điểm ảnh Giả sử a b giá trị màu điểm ảnh Khoảng cách màu d a b tính sau: d(a,b)=|Ra-Rb| + |Ga-Gb| + |Ba-Bb| Trong Ra: giá trị màu đỏ điểm ảnh Ga: giá trị màu xanh (green)tại điểm ảnh Ba: giá trị màu xanh da trời (blue) điểm ảnh Nếu khoảng cách màu d=0 điểm ảnh có màu Đường biên giữ vùng đường biên cần tìm Trang 4/18 Tiểu luận môn xử lý ảnh - Biên phương pháp dị biên  Thuật tốn tìm đường biên dựa biến thiên giá trị màu điểm ảnh Đầu vào: Ma trận điểm ảnh, khoảng cách màu tối thiểu Đầu ra: Ma trận điểm ảnh (chứa đường biên tìm thấy) Giải thuật: For (mỗi điểm ảnh ảnh) { - Tính khoảng cách màu điểm ảnh với điểm ảnh lân cận: Tính theo hướng điểm ảnh if(Nếu có khoảng cách màu lớn khoảng cách màu cho phép) { - Ghi nhận điểm ảnh điểm biên } } 1.4 Chương trình 1.4.1 Giao diện chức Màn hình chạy có giao diện sau: Trang 5/18 Tiểu luận môn xử lý ảnh - Biên phương pháp dò biên 1.4.2 Chức Gradient  Bao gồm hai chức năng: o Sobel o Prewitt  Kết dò biên theo kỹ thuật Gradient với toán tử Sobel  Kết dị biên theo kỹ thuật Gradient với tốn tử Sobel Trang 6/18 Tiểu luận môn xử lý ảnh - Biên phương pháp dò biên Nhận xét:  Khi áp dụng hai toán tử cho ta kết tương tự  Phương pháp tạo nên đường biên đậm 1.4.3 Chức Laplace Chức bao gồm  chức Laplace-h2: sử dựng mặt nạ H2  Kết dò biên theo kỹ thuật Laplace Trang 7/18 Tiểu luận môn xử lý ảnh - Biên phương pháp dò biên 1.4.4 Chức dò biên gián tiếp(Indirect Method)  Kết dò biên theo phương pháp Trang 8/18 Tiểu luận môn xử lý ảnh - Biên phương pháp dò biên 1.5 Một số hàm thủ tục void CDemo3Doc::OnMethodSobel() { // TODO: Add your command handler code here if (image==0) return; if (!image->IsValid()) return; long Gx[3][3]; long Gy[3][3]; Gx[0][0] = -1; Gx[0][1] = 0; Gx[0][2] = 1; Gx[1][0] = -1; Gx[1][1] = 0; Gx[1][2] = 1; Gx[2][0] = -1; Gx[2][1] = 0; Gx[2][2] = 1; // Gy[0][0] = -1; Gy[0][1] = -1; Gy[0][2] = -1; Gy[1][0] = 0; Gy[1][1] = 0; Gy[1][2] = 0; Gy[2][0] = 1; Gy[2][1] = 1; Gy[2][2] = 1; Gradient(Gx,Gy); image->Filter(kernel,3,16,0); UpdateAllViews(NULL); } Trang 9/18 Tiểu luận môn xử lý ảnh - Biên phương pháp dò biên bool CDemo3Doc::Gradient(long Gx[3][3], long Gy[3][3]) { //neu khong co du lieu anh if(!image->GetDIB()) return false; // Gradient Algorithm long sum; long sumx,sumy;//gia tri tinh gx, gy long x,y; //long r,g,b; long i,j,gx,gy; //RGBQUAD c; //CxImage tmp; BYTE cindex; //tmp=image->cop CxImage tmp; tmp.Copy (*image); long xmin,xmax,ymin,ymax; xmin = ymin = 0; xmax =(long) image->GetWidth(); ymax=(long)image>GetHeight(); //neu anh la 8bit/1pixel if ((image->GetBpp() ==8)||(image->GetBpp() ==4)) { for(y=ymin; yGetWidth(); ymax=(long)img->GetHeight(); //neu anh la 8bit/1pixel if ((image->GetBpp() ==8) || (image->GetBpp() ==4)) { for(y=ymin; yGetPixelIndex(x,y) ; posindex=img->GetPixelIndex(x+1,y+1) ; //neu index tai diem x,y khong lon hon tai diem x-1,y-1 va x+1,y+1 thi loai bo if ((indexIsValid()) return; Trang 12/18 12 Tiểu luận môn xử lý ảnh - Biên phương pháp dò biên long Gx[3][3]; long Gy[3][3]; Gx[0][0] = -1; Gx[0][1] = 0; Gx[0][2] = 1; Gx[1][0] = -2; Gx[1][1] = 0; Gx[1][2] = 2; Gx[2][0] = -1; Gx[2][1] = 0; Gx[2][2] = 1; /* 3x3 GY Sobel mask Ref: www.cee.hw.ac.uk/hipr/html/sobel.html */ Gy[0][0] = -1; Gy[0][1]=-2; Gy[0][2] =-1; Gy[1][0] = 0; Gy[1][1] = 0; Gy[1][2] = 0; Gy[2][0] = 1; Gy[2][1] = 2; Gy[2][2] = 1; if(Gradient(Gx,Gy)==false) AfxMessageBox("Khong co du lieu anh");; UpdateAllViews(NULL); } bool CDemo3Doc::Laplace(long G[3][3]) { //neu khong co du lieu anh if(!image->GetDIB()) return false; // // Gradient Algorithm long sum; long sumx; long x,y; //long r,g,b; long i,j,g; //RGBQUAD c; //CxImage tmp; BYTE cindex; CxImage tmp; tmp.Copy (*image); long xmin,xmax,ymin,ymax; xmin = ymin = 0; xmax =(long) image->GetWidth(); ymax=(long)image->GetHeight(); //neu anh la 8bit/1pixel if ((image->GetBpp() ==8) || (image->GetBpp() ==4)) { for(y=ymin; yTransfer(tmp); return true; } void CDemo3Doc::OnMethodLaplace() { // TODO: Add your command handler code here if (image==0) return; if (!image->IsValid()) return; long Gx[3][3]; Gx[0][0] = -1; Gx[0][1] =-1; Gx[0][2]= -1; Gx[1][0] = -1; Gx[1][1] = 8; Gx[1][2]= -1; Gx[2][0] = -1; Gx[2][1] =-1; Gx[2][2]= -1; if(Laplace(Gx)==false) AfxMessageBox("Khong co du lieu anh"); UpdateAllViews(NULL); } bool CDemo3Doc::DoBien() { //neu khong co du lieu anh if(!image->GetDIB()) return false; // // // // long sum; long sumx; long x,y; long d1,d2,d3,d4,d5,d6,d7,d8; long r,g,b; long i,j; //RGBQUAD c; //CxImage tmp; //BYTE cindex; RGBQUAD c,c1,c2,c3,c4,c5,c6,c7,c8; RGBQUAD bc; int dis_min=0; //CoArray CxImage tmp; tmp.Copy (*image); Trang 15/18 15 Tiểu luận môn xử lý ảnh - Biên phương pháp dò biên long xmin,xmax,ymin,ymax; xmin = ymin = 0; xmax =(long) image->GetWidth(); ymax=(long)image->GetHeight(); for(y=ymin; yGetBpp() ==8) || (image->GetBpp() ==4)) { for(y=ymin; yGetPixelIndex (x,y)==image->GetPixelIndex (0,0)) { -c1.rgbGreen)+ -c2.rgbGreen)+ -c3.rgbGreen)+ -c4.rgbGreen)+ Trang 16/18 c1=image->GetPixelColor(x-1,y); c2=image->GetPixelColor(x+1,y); c3=image->GetPixelColor(x,y-1); c4=image->GetPixelColor(x,y+1); c5=image->GetPixelColor(x-1,y-1); c6=image->GetPixelColor(x+1,y+1); c7=image->GetPixelColor(x+1,y-1); c8=image->GetPixelColor(x-1,y+1); //tinh khoang cach giua hai mau d1=abs(c.rgbRed-c1.rgbRed)+abs(c.rgbGreen abs(c.rgbBlue -c1.rgbBlue ); d2=abs(c.rgbRed-c2.rgbRed)+abs(c.rgbGreen abs(c.rgbBlue -c2.rgbBlue ); d3=abs(c.rgbRed-c3.rgbRed)+abs(c.rgbGreen abs(c.rgbBlue -c3.rgbBlue ); d4=abs(c.rgbRed-c4.rgbRed)+abs(c.rgbGreen abs(c.rgbBlue -c4.rgbBlue ); 16 Tiểu luận môn xử lý ảnh - Biên phương pháp dò biên -c5.rgbGreen)+ -c6.rgbGreen)+ -c7.rgbGreen)+ -c8.rgbGreen)+ d5=abs(c.rgbRed-c5.rgbRed)+abs(c.rgbGreen abs(c.rgbBlue -c5.rgbBlue ); d6=abs(c.rgbRed-c6.rgbRed)+abs(c.rgbGreen abs(c.rgbBlue -c6.rgbBlue ); d7=abs(c.rgbRed-c7.rgbRed)+abs(c.rgbGreen abs(c.rgbBlue -c7.rgbBlue ); d8=abs(c.rgbRed-c8.rgbRed)+abs(c.rgbGreen abs(c.rgbBlue -c8.rgbBlue ); if(d1>dis_min || d2>dis_min || d3>dis_min d4>dis_min || d5>dis_min ||d6>dis_min||d7>dis_min ||d8>dis_min) { || //dat mau den tai cac diem bien bc=tmp.GetPixelColor(x,y-1); //neu diem truoc la diem bien if(bc.rgbBlue==0 ||bc.rgbGreen ==0 || bc.rgbRed ==0 ) { tmp.SetPixelColor(x,y,RGB(0,0,0)); } else { tmp.SetPixelColor(x,y,RGB(0,0,0)); } // } } } } } image->Transfer(tmp); return true; } void CDemo3Doc::OnIndirectMethod() { // TODO: Add your command handler code here DoBien(); UpdateAllViews(NULL); } Trang 17/18 17 Tiểu luận môn xử lý ảnh - Biên phương pháp dò biên Trang 18/18 18 ... ảnh đầu ra, sử dụng cơng thức: G=|Gx|+ |Gy| 1.3.2 Phương pháp dị biên theo kỹ thuật Laplace Kỹ thuật Laplace dò biên theo cách tính xấp xỉ đạo hàm bậc hai dựa mặt nạ Chương trình sử dụng mặt nạ... if(Nếu có khoảng cách màu lớn khoảng cách màu cho phép) { - Ghi nhận điểm ảnh điểm biên } } 1.4 Chương trình 1.4.1 Giao diện chức Màn hình chạy có giao diện sau: Trang 5/18 Tiểu luận môn xử lý ảnh... mặt nạ Prewitt Giả sử Gx Gy ma trận điểm ảnh thu sau nhân chập với mặt nạ theo hai hướng tương ứng Ma trận điểm ảnh G tính xấp xỉ theo cơng thức sau: G=|Gx| + |Gy|  Thuật tốn dò biên theo phương

Ngày đăng: 01/11/2013, 17:20

Hình ảnh liên quan

Màn hình chính khi chạy có giao diện như sau: - CHƯƠNG TRÌNH ỨNG DỤNG

n.

hình chính khi chạy có giao diện như sau: Xem tại trang 5 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan