Đồ án Xử lý ảnh Biến đổi ảnh với phương pháp Image Distortion

20 767 1
Đồ án Xử lý ảnh  Biến đổi ảnh với phương pháp Image Distortion

Đ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

Thông tin được dưới 3 dạng chủ yếu là: âm thanh, văn bản và hình ảnh. Do vậy, xử lý ảnh là một trong những lĩnh vực quan trọng của ngành công nghệ thông tin. Mặc dù, đây là một lĩnh vực khó. Tuy nhiên, ngày nay, nó đang ngày càng trở nên quan trọng trong hệ thống các lĩnh vực phát triển công nghệ thông tin, ứng dụng vào để giải quyết các bài toán phục vụ nhu cầu con người. Sau thời gian học tập tại khoa Công Nghệ Thông Tin, nhóm chúng em đã lựa chọn đề tài Biến đổi ảnh với phương pháp Image Distortion với mong muốn vận dụng những kiến thức mình đã học, xây dựng được một trang web có tính thực tiễn, đồng thời mỗi thành viên trong nhóm củng cố lại những kiến thức của mình qua thực hành. Chúng em xin chân thành cảm ơn các thầy giáo Nguyễn Hữu Quỳnh và thầy Cù Việt Dũng, giảng viên bộ môn “Xử lý ảnh” đã tận tình giảng dạy chúng em trong suốt thời gian học tập vừa qua để giúp chúng em hoàn thiện đề tài này. Chúng em xin chân thành cảm ơn thầy.

TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO ĐỒ ÁN MÔN HỌC XỬ LÝ ẢNH Đề tài: Biến đổi ảnh với phương pháp Image Distortion Sinh viên thực hiện: Nguyễn Hoài Sơn, D6CNTT Nguyễn Thị Kiều Trang, D6CNTT Nguyễn Tuấn Đạt, D6CNTT Giáo viên hướng dẫn: TS NGUYỄN HỮU QUỲNH HÀ NỘI, THÁNG 1-2015 TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO ĐỒ ÁN MÔN HỌC XỬ LÝ ẢNH Đề tài: Biến đổi ảnh với phương pháp Image Distortion Sinh viên thực hiện: Nguyễn Hoài Sơn, D6CNTT Nguyễn Thị Kiều Trang, D6CNTT Nguyễn Tuấn Đạt, D6CNTT Giáo viên hướng dẫn: TS NGUYỄN HỮU QUỲNH HÀ NỘI, THÁNG 1-2015 LỜI NÓI ĐẦU Thông tin dạng chủ yếu là: âm thanh, văn hình ảnh Do vậy, xử lý ảnh lĩnh vực quan trọng ngành công nghệ thông tin Mặc dù, lĩnh vực khó Tuy nhiên, ngày nay, ngày trở nên quan trọng hệ thống lĩnh vực phát triển công nghệ thông tin, ứng dụng vào để giải toán phục vụ nhu cầu người Sau thời gian học tập khoa Công Nghệ Thông Tin, nhóm chúng em lựa chọn đề tài Biến đổi ảnh với phương pháp Image Distortion với mong muốn vận dụng kiến thức học, xây dựng trang web có tính thực tiễn, đồng thời thành viên nhóm củng cố lại kiến thức qua thực hành Chúng em xin chân thành cảm ơn thầy giáo Nguyễn Hữu Quỳnh thầy Cù Việt Dũng, giảng viên môn “Xử lý ảnh” tận tình giảng dạy chúng em suốt thời gian học tập vừa qua để giúp chúng em hoàn thiện đề tài Chúng em xin chân thành cảm ơn thầy Hà Nội, ngày tháng năm 2014 Nguyễn Hoài Sơn Nguyễn Thị Kiều Trang Nguyễn Tuấn Đạt MỤC LỤC CHƯƠNG 1: CÁC KHÁI NIỆM TỔNG QUÁT 1.1 Xử lý ảnh Xử lý ảnh ngành khoa học mẻ so với ngành khoa học khác Hiện nay, học quan tâm giảng dạy cho sinh viên ngành công nghệ thông tin Nhờ có công nghệ số hóa đại, ngày người xử lý tín hiệu nhiều chiều thông qua nhiều hệ thống khác Từ mạch số đơn giản máy tính song song cao cấp Mục tiêu xử lý ảnh chia làm hướng sau: - Xử lý ảnh ban đầu để thu ảnh theo tiêu chí xác định (ví dụ, ảnh ban đầu mờ, xử lý để làm ảnh rõ nét hơn) - Phân tích ảnh để thu thông tin đặc trưng, giúp cho việc phân loại ảnh, nhận biết ảnh - Hiểu ảnh đầu vào để mô tả ảnh mức cao hơn, sâu Ví dụ, từ ảnh chụp vụ tai nạn giao thông phác thảo trường tai nạn 1.2 Ảnh BMP Trong đồ họa máy vi tính, BMP, biết đến với tên tiếng Anh khác Windows bitmap, định dạng tập tin hình ảnh phổ biến Các tập tin đồ họa lưu dạng BMP thường có đuôi BMP DIB (Device Independent Bitmap) Các thuộc tính tiêu biểu tập tin ảnh BMP (cũng file ảnh nói chung) là: Số bit điểm ảnh (bit per pixel), thường ký hiệu n Một ảnh BMP n-bit có màu Giá trị n lớn ảnh có nhiều màu, rõ nét Giá trị tiêu biểu n (ảnh đen trắng), (ảnh 16 màu), (ảnh 256 màu), 16 (ảnh 65536 màu) 24 (ảnh 16 triệu màu) Ảnh BMP 24-bit có chất lượng hình ảnh trung thực - Chiều cao ảnh (height), cho điểm ảnh (pixel) - - Chiều rộng ảnh (width), cho điểm ảnh Cấu trúc tập tin ảnh BMP bao gồm phần - Bitmap Header (14 bytes): giúp nhận dạng tập tin bitmap Bitmap Information (40 bytes): lưu số thông tin chi tiết giúp hiển thị ảnh - Color Palette (4*x bytes), x số màu ảnh: định nghĩa màu sử dụng ảnh - Bitmap Data: lưu liệu ảnh Đặc điểm bật định dạng BMP tập tin hình ảnh thường không nén thuật toán Khi lưu ảnh, điểm ảnh ghi trực tiếp vào tập tin - điểm ảnh mô tả hay nhiều byte tùy thuộc vào giá trị n ảnh Do đó, hình ảnh lưu dạng BMP thường có kích cỡ lớn, gấp nhiều lần so với ảnh nén (chẳng hạn GIF, JPEG hay PNG) Định dạng BMP hỗ trợ hầu hết phần mềm đồ họa chạy Windows, số ứng dụng chạy MS-DOS Ngay từ Windows 3.1, Microsoft cho đời phần mềm PaintBrush, phần mềm hỗ trợ vẽ hình ảnh đơn giản lưu hình ảnh vẽ dạng BMP 16 hay 256 màu Tuy nhiên, kích thước tập tin ảnh BMP lớn, định dạng BMP không phù hợp để trao đổi hình ảnh qua mạng Internet (do hạn chế tốc độ truyền liệu) Do đó, trang web thường sử dụng ảnh dạng GIF, JPEG hay PNG Các định dạng hỗ trợ thuật toán nén hình ảnh, giảm bớt kích cỡ ảnh 1.3 Thư viện đồ họa GDI++ C# GDI thư viện cung cấp hàm (funtions) cấu trúc liệu (structures) cần thiết để ứng dụng tạo kết xuất dạng đồ họa (hiển thị lên hình, in máy in…) Các hàm GDI cho phép vẽ đường thẳng, đường cong, hình đa giác, xuất kí tự hiển thị ảnh bitmap, in ấn… GDI không tương tác trực tiếp với thiết bị phần cứng, mà thông qua driver CHƯƠNG 2: BIẾN ĐỔI ẢNH 2.1 Phương pháp biến đổi ảnh Để xử lý ảnh đưa vào, trước tiên cần tạo phân vùng để xử lý ảnh Ở sử dụng hình chữ nhật để ảnh hiển thị vào nó, kích thước ảnh khác nên hình chữ nhật khởi tạo ban đầu sau đưa ảnh vào có kích thước ảnh 2.2 Mục đích việc biến đổi hình ảnh Biển đổi ảnh vấn đề xử lý ảnh Ngoài việc tác động đến kích thước, hình dạng ảnh ban đầu Việc biến đổi ảnh tiền đề để xây dựng ứng dụng nâng cao, hữu ích hơn, phục vụ để giải nhiều toán phức tạp lĩnh vực xử lý ảnh Một ví dụ điểu hình cho việc ứng dụng biến đổi ảnh tính Free Transform Distoration phần mềm đồ họa Photoshop hang Adobe Một số vấn đề khác xử lý ảnh, tùy vào toán cụ thể mục đích người phát triển, biết cách kết hợp chúng với tạo ứng dụng giải tốt vấn đề cần quan tâm • Nắn chỉnh biến dạng • Khử nhiễu • Chỉnh mức xám • Trích chọn đặc điểm • Nhận dạng • Nén ảnh CHƯƠNG 3: PHƯƠNG PHÁP 4-POINTS IMAGE DISTORTION 3.1 Ý tưởng thuật toán Ý tưởng thuật toán biến đổi ảnh với phương pháp làm méo ảnh điểm dựa làm méo hình ảnh ban đầu thành hình ảnh khác cách thay đổi vị trí điểm riêng biệt góc hình Đây ví dụ đơn giản cho thuật toán biến đổi hình ảnh lĩnh vực xử lý ảnh Điển hình cho ứng dụng tính Biến đổi ảnh – làm méo ảnh (Distoration) phần mềm đồ họa Photoshop hãng Adobe Mặc dù, đề tài này, ứng dụng tính tốc độ xử lý chậm Tuy nhiên, mô tương tự với Distoration Photoshop  Quá trình làm méo ảnh sử dụng lý thuyết toán học lấy điểm từ ảnh bitmap người dùng chọn tìm tọa độ tương ứng sau người dùng di chuyển điểm góc hình  Cụ thể, xác đỉnh điểm giao góc  Sau đó, chương trình dịch chuyển ảnh, điểm ảnh kiểm tra để tính tọa độ cho điểm giao nhau góc  Sau thực phép tính nhân, chia cần thiết với tất điểm giao kết hình ảnh sau biến đổi 3.2 Triển khai thuật toán 3.2.1 Thuật toán xử lý ảnh bitmap RBGA viết tắt từ Red Green Blue Alpha Đôi RBGA miêu tả không gian màu, thực tế giống hết cách dùng hệ màu RGB (Red Green Blue), khác có them thông tin bổ sung giá trị nguyên Alpha Alpha Catmull Smith tìm khoảng năm 1971 – 1972 Kênh màu Alpha thường sử dụng kênh điều chỉnh hiển thị độ rõ, mờ ảnh Khi giá trị alpha tối đa (100%) ảnh bị ẩn hoàn toàn, ngược lại alpha tối thiểu (0%) ảnh hiển thị hoàn toàn Hình 3.1: Hệ màu RGBA File ảnh định dạng png ví dụ điển hình sử dụng hệ màu RBGA Hàm lấy giá trị RBGA cho điểm ảnh (pixel) private struct PixelData { public byte blue; public byte green; public byte red; public byte alpha; public override string ToString() { return "(" + alpha.ToString() + ", " + red.ToString() + ", " + green.ToString() + ", " + blue.ToString() + ")"; } } Hàm xử lý ảnh đầu vào private private private private Bitmap workingBitmap = null; int width = 0; BitmapData bitmapData = null; Byte* pBase = null; public FastBitmap(Bitmap inputBitmap) { workingBitmap = inputBitmap; } public void LockImage() { //Size Rectangle bounds = new Rectangle(Point.Empty, workingBitmap.Size); width = (int)(bounds.Width * sizeof(PixelData)); if (width % != 0) width = * (width / + 1); //Lock Image bitmapData = workingBitmap.LockBits(bounds, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); pBase = (Byte*)bitmapData.Scan0.ToPointer(); } private PixelData* pixelData = null; public Color GetPixel(int x, int y) { pixelData = (PixelData*)(pBase + y * width + x * sizeof(PixelData)); return Color.FromArgb(pixelData->alpha, pixelData>red, pixelData->green, pixelData->blue); } public Color GetPixelNext() { pixelData++; return Color.FromArgb(pixelData->alpha, pixelData>red, pixelData->green, pixelData->blue); } public void SetPixel(int x, int y, Color color) { PixelData* data = (PixelData*)(pBase + y * width + x * sizeof(PixelData)); data->alpha = color.A; } data->green = color.G; data->blue = color.B; data->red = color.R; public void UnlockImage() { workingBitmap.UnlockBits(bitmapData); bitmapData = null; pBase = null; } 3.2.2 Xử lý biến đổi làm méo đỉnh Hàm khai báo cấu trúc vector private struct Vector { public PointF Origin; public float Direction; } public Vector(PointF origin, float direction) { this.Origin = origin; this.Direction = direction; } Hàm biến đổi làm méo đỉnh public static Bitmap Distort(Bitmap sourceBitmap, Point topleft, Point topright, Point bottomleft, Point bottomright, int interpolation) { double sourceWidth = sourceBitmap.Width; double sourceHeight = sourceBitmap.Height; //Find dimensions of new image Point[] pointarray = new Point[] { topleft, topright, bottomright, bottomleft }; int width = int.MinValue; int height = int.MinValue; foreach (Point p in pointarray) { width = Math.Max(width, p.X); height = Math.Max(height, p.Y); } Bitmap bitmap = new Bitmap(width, height); //For faster image processing BitmapProcessing.FastBitmap newBmp = new BitmapProcessing.FastBitmap(bitmap); BitmapProcessing.FastBitmap sourceBmp = new BitmapProcessing.FastBitmap(sourceBitmap); newBmp.LockImage(); sourceBmp.LockImage(); //Key points PointF A = (PointF)topleft; PointF B = (PointF)topright; PointF C = (PointF)bottomright; PointF D = (PointF)bottomleft; // sides float mAB float mCD float mAD float mBC = = = = GetAngle(A, GetAngle(C, GetAngle(A, GetAngle(B, B); D); D); C); //Get corner intersections PointF O = GetIntersection(new Vector(B, mAB), new Vector(C, mCD)); PointF N = GetIntersection(new Vector(A, mAD), new Vector(B, mBC)); if (interpolation sourceWidth) && (top < -1 || top > sourceHeight)) { //if outside of source image just move on continue; } //weights double xFrac = xP0 - (double)left; double xFracRec = 1.0 - xFrac; double yFrac = yP0 - (double)top; double yFracRec = 1.0 - yFrac; //get source pixel colors, or white if out of range (to interpolate into the background color) int x0; int y0; Color c; for (int sx = 0; sx < interpolation; sx++) { for (int sy = 0; sy < interpolation; sy++) { x0 = left + sx; y0 = top + sy; if (x0 > && y0 > && x0 < sourceWidth && y0 < sourceHeight) { c = sourceBmp.GetPixel(x0, y0); source[sx, source[sx, source[sx, source[sx, } else { case sy, sy, sy, sy, 0] 1] 2] 3] = = = = c.R; c.G; c.B; 255.0f; // set full transparency in this source[sx, sy, 0] = 0; source[sx, sy, 1] = 0; source[sx, sy, 2] = 0; 10 } } source[sx, sy, 3] = 0; } //interpolate on x for (int sy = 0; sy < interpolation; sy++) { //check transparency if (source[middleX, sy, 3] != && source[0, sy, 3] == 0) { } else { xFracRec + source[middleX, xFracRec + source[middleX, xFracRec + source[middleX, xFracRec + source[middleX, } //copy colors source[0, sy, source[0, sy, source[0, sy, source[0, sy, from 0] = 1] = 2] = 3] = //compute colors source[0, sy, 0] sy, 0] * xFrac; source[0, sy, 1] sy, 1] * xFrac; source[0, sy, 2] sy, 2] * xFrac; source[0, sy, 3] sy, 3] * xFrac; 1, sy source[1, source[1, source[1, source[1, sy, sy, sy, sy, 0]; 1]; 2]; 3]; by interpolation = source[0, sy, 0] * = source[0, sy, 1] * = source[0, sy, 2] * = source[0, sy, 3] * //interpolate transparency source[0, sy, 3] = source[0, sy, 3] * xFracRec + source[middleX, sy, 3] * xFrac; } //now interpolate on y //check transparency if (source[0, middleX, 3] != && source[0, 0, 3] == 0) { } //copy colors from 0, source[0, 0, 0] = source[0, source[0, 0, 1] = source[0, source[0, 0, 2] = source[0, source[0, 0, 3] = source[0, middleX, middleX, middleX, middleX, 0]; 1]; 2]; 3]; 11 else { + source[0, middleX, 0] + source[0, middleX, 1] + source[0, middleX, 2] + source[0, middleX, 3] } source[0, * yFrac; source[0, * yFrac; source[0, * yFrac; source[0, * yFrac; 0, 0] = source[0, 0, 0] * yFracRec 0, 1] = source[0, 0, 1] * yFracRec 0, 2] = source[0, 0, 2] * yFracRec 0, 3] = source[0, 0, 3] * yFracRec //interpolate transparency source[0, 0, 3] = source[0, 0, 3] * yFracRec + source[0, middleX, 3] * yFrac; //store to bitmap if (source[0, 0, 3] != 0) //pixel has color newBmp.SetPixel(x, y, Color.FromArgb((int)source[0, 0, 3], (int)source[0, 0, 0], (int)source[0, 0, 1], (int)source[0, 0, 2])); } } sourceBmp.UnlockImage(); newBmp.UnlockImage(); return bitmap; } 12 CHƯƠNG 4: GIAO DIỆN CHƯƠNG TRÌNH 4.1 Giao diện mở ảnh Hình 4.1: Giao diện mở ảnh 4.2 Giao diện chỉnh sửa ảnh Hình 4.2: Giao diện chỉnh sửa ảnh 13 CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 5.1 Kết  Hiểu tầm quan trọng xử lý ảnh ứng dụng môn học việc giải vấn đề thực tế;  Nắm kiến thức xử lý ảnh áp dụng vào giải toán cụ thể 5.2 Hướng phát triển  Phát triển đề tài thêm nhiều tính mới, hoàn thiện hơn;  Sử dụng toán để giải số yêu cầu thực tế 14 TÀI LIỆU THAM KHẢO Slide giảng “Xử Lý Ảnh”, TS Đào Nam Anh, Trường Đại Học Điện Lực, 2014 Visual C# Kicks – High-quality NET articles and components, http://www.vcskicks.com 15 NHẬN XÉT, ĐÁNH GIÁ CỦA GIÁO VIÊN 16 [...]... 0, 1], (int)source[0, 0, 2])); } } sourceBmp.UnlockImage(); newBmp.UnlockImage(); return bitmap; } 12 CHƯƠNG 4: GIAO DIỆN CHƯƠNG TRÌNH 4.1 Giao diện khi mở ảnh Hình 4.1: Giao diện khi mở ảnh 4.2 Giao diện khi chỉnh sửa ảnh Hình 4.2: Giao diện khi chỉnh sửa ảnh 13 CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 5.1 Kết quả  Hiểu được tầm quan trọng của xử lý ảnh và ứng dụng của môn học trong việc giải quyết các... xử lý ảnh và áp dụng vào giải quyết các bài toán cụ thể 5.2 Hướng phát triển  Phát triển đề tài thêm nhiều tính năng mới, hoàn thiện hơn;  Sử dụng bài toán để giải quyết một số yêu cầu trong thực tế 14 TÀI LIỆU THAM KHẢO 1 Slide bài giảng Xử Lý Ảnh , TS Đào Nam Anh, Trường Đại Học Điện Lực, 2014 2 Visual C# Kicks – High-quality NET articles and components, http://www.vcskicks.com 15 NHẬN XÉT, ĐÁNH... data->red = color.R; public void UnlockImage() { workingBitmap.UnlockBits(bitmapData); bitmapData = null; pBase = null; } 3.2.2 Xử lý biến đổi làm méo bằng 4 đỉnh Hàm khai báo cấu trúc vector private struct Vector { public PointF Origin; public float Direction; } public Vector(PointF origin, float direction) { this.Origin = origin; this.Direction = direction; } Hàm biến đổi làm méo bằng 4 đỉnh public static... sourceHeight = sourceBitmap.Height; //Find dimensions of new image Point[] pointarray = new Point[] { topleft, topright, bottomright, bottomleft }; int width = int.MinValue; int height = int.MinValue; 7 foreach (Point p in pointarray) { width = Math.Max(width, p.X); height = Math.Max(height, p.Y); } Bitmap bitmap = new Bitmap(width, height); //For faster image processing BitmapProcessing.FastBitmap newBmp =... image processing BitmapProcessing.FastBitmap newBmp = new BitmapProcessing.FastBitmap(bitmap); BitmapProcessing.FastBitmap sourceBmp = new BitmapProcessing.FastBitmap(sourceBitmap); newBmp.LockImage(); sourceBmp.LockImage(); //Key points PointF A = (PointF)topleft; PointF B = (PointF)topright; PointF C = (PointF)bottomright; PointF D = (PointF)bottomleft; // sides float mAB float mCD float mAD float mBC... surrounding pixels if (xP0 < 0) xP0 ; if (yP0 < 0) yP0 ; 9 int left = (int)xP0; int top = (int)yP0; if ((left < -1 || left > sourceWidth) && (top < -1 || top > sourceHeight)) { //if outside of source image just move on continue; } //weights double xFrac = xP0 - (double)left; double xFracRec = 1.0 - xFrac; double yFrac = yP0 - (double)top; double yFracRec = 1.0 - yFrac; //get source pixel colors, or ... toán biến đổi hình ảnh lĩnh vực xử lý ảnh Điển hình cho ứng dụng tính Biến đổi ảnh – làm méo ảnh (Distoration) phần mềm đồ họa Photoshop hãng Adobe Mặc dù, đề tài này, ứng dụng tính tốc độ xử lý. .. xuất kí tự hiển thị ảnh bitmap, in ấn… GDI không tương tác trực tiếp với thiết bị phần cứng, mà thông qua driver CHƯƠNG 2: BIẾN ĐỔI ẢNH 2.1 Phương pháp biến đổi ảnh Để xử lý ảnh đưa vào, trước...TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO ĐỒ ÁN MÔN HỌC XỬ LÝ ẢNH Đề tài: Biến đổi ảnh với phương pháp Image Distortion Sinh viên thực hiện: Nguyễn Hoài Sơn, D6CNTT Nguyễn

Ngày đăng: 21/01/2016, 12:22

Từ khóa liên quan

Mục lục

  • 1.1. Xử lý ảnh

  • 1.3. Thư viện đồ họa GDI++ trong C#

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

Tài liệu liên quan