CHUYỂN ĐỔI ẢNH XÁM SANG ẢNH MÀU VÀ ẢNH MÀU SANG ẢNH XÁM THEO MÔ HÌNH HSI Giảng viên hướng dẫn : Ths. Trịnh Thế Vinh Sinh viên thực hiện : Trương Hùng Anh Huỳnh Ngọc Tuân Lê Thị Thùy Liên Lê Phạm Thảo Quyên Đà nẵng, tháng 12/2012 MỤC LỤC LỜI MỞ ĐẦU 3 PHẨN I: CƠ SỞ LÝ THUYẾT 4 I.1 Khái niệm ảnh đen trắng và ảnh màu 4 I.1.1 Ảnh đen trắng 4 I.1.2 Ảnh màu 5 I.2 Mô hình màu HSI 5 PHẦN II: TỔNG QUAN VỀ CHƯƠNG TRÌNH 7 II.1 Giới thiệu về ngôn ngữ lập trình VB.NET 7 II.1.1 Sơ lược về Visual Basic.NET 7 II.1.2 .NET Framework 7 II.2 Các tính năng của chương trình 8 II.2.1 Chuyển đổi ảnh màu sang ảnh xám 8 II.2.2 Chuyển từ ảnh xám sang ảnh màu bằng mô hình màu HSI 10 II.3 Giao diện chương trình 13 PHẦN III: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 14 LỜI MỞ ĐẦU Xử lý ảnh là một trong những mảng quan trọng nhất trong kỹ thuật thị giác máy tính, là tiền đề cho nhiều nghiên cứu thuộc lĩnh vực này. Hai nhiệm vụ cơ bản của quá trình xử lý ảnh là nâng cao chất lượng thông tin hình ảnh và xử lý số liệu cung cấp cho các quá trình khác trong đó có việc ứng dụng thị giác vào điều khiển. Quá trình bắt đầu từ việc thu nhận ảnh nguồn (từ các thiết bị thu nhận ảnh dạng số hoặc tương tự) gửi đến máy tính. Dữ liệu ảnh được lưu trữ ở định dạng phù hợp với quá trình xử lý. Người lập trình sẽ tác động các thuật toán tương ứng lên dữ liệu ảnh nhằm thay đổi cấu trúc ảnh phù hơp với các ứng dụng khác nhau. Qua quá trình học tập và nghiên cứu cộng với sự mày mò của bản thân cũng như mọi người, nhóm em đã xây dựng một chương trình xử lý ảnh có một số chức năng như sau: • Chuyển ảnh màu sang ảnh xám. • Chuyển ảnh xám sang ảnh màu. • Mô hình màu HSI. Do thời gian và trình độ có hạn nên bài tập điều kiện 02 của nhóm em còn có nhiều thiếu sót. Em rất mong nhận đ¬ợc những lời nhận xét và chỉ bảo của Thầy. Chúng em xin chân thành cảm ơn !!!
Bài tập điều kiện II Môn: Xử lý ảnh BỘ GIÁO DỤC VÀ ĐÀO TẠO Học Viện Công Nghê Bưu Chính Viễn Thông KHOA CNTT CHUYỂN ĐỔI ẢNH XÁM SANG ẢNH MÀU VÀ ẢNH MÀU SANG ẢNH XÁM THEO MÔ HÌNH HSI Giảng viên hướng dẫn : Ths. Trịnh Thế Vinh Sinh viên thực hiện : Trương Hùng Anh Huỳnh Ngọc Tuân Lê Thị Thùy Liên Lê Phạm Thảo Quyên Đà nẵng, tháng 12/2012 Nhóm thực hiện: Nhóm 1-L11CQCN12BTrang 1 Bài tập điều kiện II Môn: Xử lý ảnh MỤC LỤC Link download code vb nằm ở cuối trang (hình ảnh trong file) Nhóm thực hiện: Nhóm 1-L11CQCN12BTrang 2 Bài tập điều kiện II Môn: Xử lý ảnh LỜI MỞ ĐẦU Xử lý ảnh là một trong những mảng quan trọng nhất trong kỹ thuật thị giác máy tính, là tiền đề cho nhiều nghiên cứu thuộc lĩnh vực này. Hai nhiệm vụ cơ bản của quá trình xử lý ảnh là nâng cao chất lượng thông tin hình ảnh và xử lý số liệu cung cấp cho các quá trình khác trong đó có việc ứng dụng thị giác vào điều khiển. Quá trình bắt đầu từ việc thu nhận ảnh nguồn (từ các thiết bị thu nhận ảnh dạng số hoặc tương tự) gửi đến máy tính. Dữ liệu ảnh được lưu trữ ở định dạng phù hợp với quá trình xử lý. Người lập trình sẽ tác động các thuật toán tương ứng lên dữ liệu ảnh nhằm thay đổi cấu trúc ảnh phù hơp với các ứng dụng khác nhau. Qua quá trình học tập và nghiên cứu cộng với sự mày mò của bản thân cũng như mọi người, nhóm em đã xây dựng một chương trình xử lý ảnh có một số chức năng như sau: • Chuyển ảnh màu sang ảnh xám. • Chuyển ảnh xám sang ảnh màu. • Mô hình màu HSI. Do thời gian và trình độ có hạn nên bài tập điều kiện 02 của nhóm em còn có nhiều thiếu sót. Em rất mong nhận đợc những lời nhận xét và chỉ bảo của Thầy. Chúng em xin chân thành cảm ơn !!! Nhóm 01 – L11CQCN12-B Nhóm thực hiện: Nhóm 1-L11CQCN12BTrang 3 Bài tập điều kiện II Môn: Xử lý ảnh PHẨN I: CƠ SỞ LÝ THUYẾT I.1 Khái niệm ảnh đen trắng và ảnh màu Ảnh có thể biểu diễn dưới dạng tín hiệu tương tự hoặc tín hiệu số. Trong biểu diễn số của các ảnh đa mức xám, một ảnh được biểu diễn dưới dạng một ma trận hai chiều. Mỗi phần tử của ma trận biểu diễn cho mức xám hay cường độ của ảnh tại vị trí đó. Hình 1.1. Biểu diễn mức xám của ảnh số. Trong hình 1.1, một lưới chia ô vuông tưởng tượng được đặt lên ảnh. Độ lớn mỗi ô vuông của lưới xác định kích thước của một điểm ảnh. Mức xám của một điểm được tính bằng cường độ sáng trung bình tại mỗi vuông này. Mắt lưới càng nhỏ thì chất lượng ảnh càng cao. I.1.1 Ảnh đen trắng Ảnh đen trắng chỉ bao gồm 2 màu: màu đen và màu trắng. Người ta phân mức đen trắng đó thành L mức Nếu sử dụng số bit B=8 bít để mã hóa mức đen tr ắng (hay mức xám) thì L được xác định: L=2 B (trong ví dụ của ta L=28= 256 mức). Nếu L bằng 2, B=1, nghĩa là chỉ có 2 mức: mức 0 và mức 1, còn gọi là ảnh nhị phân. Mức 1 ứng với màu sáng, còn mức 0 ứng với màu tối. Nếu L lớn hơn 2 ta có ảnh đa cấp xám. Nói cách khác, với ảnh nhị phân mỗi điểm ảnh được mã hóa trên 1 bit, còn với ảnh 256 mức, mỗi điểm ảnh được mã hóa trên 8 bit. Như vậy, với ảnh đen trắng: nếu dùng 8 bit (1 byte) để biểu diễn mức xám, số các mức xám có thể biểu diễn được là 256. Mỗi mức xám được biểu diễn dưới dạng là một số nguyên nằm trong khoảng từ 0 đến 255, với mức 0 biểu diễn cho mức cường độ đen nhất và 255 biểu diễn cho mức cường độ sáng nhất. Nhóm thực hiện: Nhóm 1-L11CQCN12BTrang 4 Bài tập điều kiện II Môn: Xử lý ảnh Ảnh nhị phân khá đơn giản, các phần tử ảnh có thể coi như các phần tử logic. Ứng dụng chính của nó được dùng theo tính logic để phân biệt đối tượng ảnh với nền hay để phân biệt điểm biên với điểm khác. I.1.2 Ảnh màu Ảnh màu theo lý thuyết của Thomas là ảnh tổ hợp từ ba màu cơ bản: đỏ (Red), lục (Green), lơ (Blue) và thường thu nhận trên các dải băng tần khác nhau. Với ảnh màu, cách biểu diễn cũng tương tự như với ảnh đen trắng, chỉ khác là các số tại mỗi phần tử của ma trận biểu diễn cho ba màu riêng rẽ gồm: đỏ (Red), lục (Green) và lơ (Blue).Để biểu diễn cho một điểm ảnh àu cần 24 bit. 24 bit này được chia thành ba khoảng 8 bit. Mỗi màu cũng phân thành L cấp màu khác nhau (thường L=256). Mỗi khoảng này biểu diễn cho cường độ sáng của một trong các màu chính. Do đó, để lưu trữ ảnh màu người ta có thể lưu trữ từng màu riêng biệt, mỗi màu lưu trữ như một ảnh đa cấp xám. I.2 Mô hình màu HSI Mô hình màu HSI hay HSV (Hue, Saturation, Value). Màu có thể được biểu diễn bởi 3 yếu tố H, S, I: • Hue (Sắc lượng) • Saturation (độ bão hòa) • Intensity (độ chói còn gọi là Value) Các mô hình màu RGB, CMY được định hướng cho phần cứng trái ngược với mô hình màu HSV của Smith hay còn được gọi là mẫu HSB với B là Brightness (độ sáng), được định hướng người sử dụng dựa trên cơ sở nền tảng về trực giác về tông màu, sắc độ và sắc thái mỹ thuật. Hệ thống tọa độ có dạng hình trụ và tập màu thành phần của không gian bên trong mô hình màu được xác định là hình nón hoặc hình chóp sáu cạnh như trong hình 1.7. Đỉnh hình chóp là sáu cạnh khi V= 1 chứa đựng mối quan hệ giữa các màu sáng và những màu trên mặt phẳng với V= 1 đều có màu sáng. Nhóm thực hiện: Nhóm 1-L11CQCN12BTrang 5 Bài tập điều kiện II Môn: Xử lý ảnh Hình 1.2. Mô hình màu HSV Sắc màu (Hue) hoặc H được đo bởi góc quanh trục đứng với màu đỏ là 0 o , màu lục là 20 o , màu lam là 240 o (xem hình 1.2). Các màu bổ sung trong hình chóp HSV ở 180 o đối diện với màu khác. Giá trị của S là một tập các giá trị đi từ 0 trên đường trục tâm (trục V) đến 1 trên các mặt bên tại đỉnh của hình chóp sáu cạnh. Sự bão hòa được đo tương đối cho gam màu tương ứng với mô hình màu này. Mô hình màu dạng hình chóp sáu cạnh này đường cao V với đỉnh là điểm gốc tọa độ (0,0). Điểm ở đỉnh là màu đen có giá trị tọa độ màu V= 0, tại các điểm này giá trị của H và S là không liên quan với nhau. Khi điểm có S= 0 và V= 1 là điểm màu trắng, những giá trị trung gian của V đối với S= 0 (trên đường thẳng qua tâm) là các màu xám. Khi S=0 giá trị của H phụ thuộc được gọi bởi các quy ước không xác định, ngược lại khi S khác 0 giá trị của H sẽ là phụ thuộc. Như vậy một màu nào đó V= 1, S= 1 là giống như màu thuần khiết trong mỹ thuật được sử dụng như điểm khởi đầu trong các màu pha trên.Thêm màu trắng phù hợp để giảm S (không có sự thay đổi V) tạo nên sự thay đổi sắc thái của gam màu. Sự chuyển màu được tạo ra bởi việc giữ S=1 và giảm V tạo nên sự thay đổi về sắc độ và tông màu tạo thành bởi việc thay đổi cả hai S và V. Nhóm thực hiện: Nhóm 1-L11CQCN12BTrang 6 Bài tập điều kiện II Môn: Xử lý ảnh PHẦN II: TỔNG QUAN VỀ CHƯƠNG TRÌNH II.1 Giới thiệu về ngôn ngữ lập trình VB.NET Là công cụ phát triển trong Visual Studio .Net, Visual Basic .Net (VB .Net) được sử dụng để xây dựng các ứng dụng Windows, Web cũng như những ứng dụng trên thiết bị cầm tay (Pocket PC, điện thoại di động) cho một số môi trường. VB.Net đã được thiết kế nhằm tăng tính hiệu quả trong công việc của người lập trình, nhất là khi cần truy xuất thông tin trong cơ sơ dữ liệu cũng như xây dựng ứng dụng Web. Đặc biệt, một khi làm quen với môi trường phát triển trong Visual Studio .Net, bạn có thể dùng cùng những công cụ để viết các chương trình trên C+ +, C# hay J# II.1.1 Sơ lược về Visual Basic.NET Visual Basic.NET (VB.NET) là ngôn ngữ lập trình khuynh hướng đối tượng (Object Oriented Programming Language) do Microsoft thiết kế lại từ con số không. Visual Basic.NET (VB.NET) không kế thừa VB6 hay bổ sung, phát triển từ VB6 mà là một ngôn ngữ lập trình hoàn toàn mới trên nền Microsoft ’s .NET Framework. Do đó, nó cũng không phải là VB phiên bản 7. Thật sự, đây là ngôn ngữ lập trình mới và rất lợi hại, không những lập nền tảng vững chắc theo kiểu mẫu đối tượng như các ngôn ngữ lập trình hùng mạnh khác đã vang danh C++, Java mà còn dễ học, dễ phát triển và còn tạo mọi cơ hội hoàn hảo để giúp ta giải đáp những vấn đề khúc mắc khi lập trình. Hơn nữa, dù không khó khăn gì khi cần tham khảo, học hỏi hay đào sâu những gì xảy ra bên trong … hậu trường OS, Visual Basic.NET (VB.NET) giúp ta đối phó với các phức tạp khi lập trình trên nền Windows và do đó, ta chỉ tập trung công sức vào các vấn đề liên quan đến dự án, công việc hay doanh nghiệp mà thôi. II.1.2 .NET Framework Đối với Visual Basic.NET (VB.NET), tất cả mọi thứ đều thay đổi tận gốc rễ. Một trong những thành phần quan trọng của .NET là .NET Framework. Đây là nền tảng cho mọi công cụ phát triển các ứng dụng (application).NET .NET Framework bao gồm: • Môi trường vận hành nền (Base Runtime Environment) • Bộ sưu tập nền các loại đối tượng (a set of foundation classes) • Môi trường vận hành nền (Base Runtime Environment) hoạt động giống như hệ điều hành cung cấp các dịch vụ trung gian giữa ứng dụng (application) và các thành phần phức tạp của hệ thống. Bộ sưu tập nền các loại đối tượng (a set of Nhóm thực hiện: Nhóm 1-L11CQCN12BTrang 7 Bài tập điều kiện II Môn: Xử lý ảnh foundation classes) bao gồm 1 số lớn các công dụng đã soạn và kiểm tra trước, tỷ như: giao lưu với hệ thống tập tin (file system access) hay ngay cả các quy ước về mạng (Internet protocols), … nhằm giảm thiểu gánh nặng lập trình cho các chuyên gia Tin Học. Do đó, việc tìm hiểu .NET Framework giúp ta lập trình dễ dàng hơn vì hầu như mọi công dụng đều đã được yểm trợ. Ta xem .NET Framework như là một tầng công dụng trừu tượng cung cấp dịch vụ trên hệ điều hành (nhìn dưới khía cạnh cung cấp dịch vụ): • User Applications • .NET Framework • Hệ điều hành (OS) • Device Drivers • Harware Components (Cương liệu) Để mọi ngôn ngữ lập trình sử dụng được các dịch vụ cung cấp bởi .NET Framework, Microsoft tạo ra 1 tiêu chuẩn chung cho ngôn ngữ lập trình gọi là Common Language Specifications (CLS). Tiêu chuẩn này giúp các chương trình biên dịch (compilers) làm việc hữu hiệu. Microsoft sáng chế ra Visual Basic.NET (VB.NET), Visual C++.NET và C# (đọc là C Sharp) cho nền .NET Framework và cũng không quên phổ biến rộng rãi CLS trong Công Nghệ Tin Học giúp các ngôn ngữ lập trình khác làm việc trong nền .NET, tỷ như: COBOL.NET, Smalltalk.NET, … Lưu ý ở đây, mặc dù Visual Basic.NET (VB.NET), Visual C++.NET hay C# khác nhau về syntax và các công dụng phụ thuộc nhưng tất cả đều biên dịch ra cùng 1 ngôn ngữ trung gian gọi là MSIL (Microsoft Intermediate Language) và do đó, không có ngôn ngữ lập trình .NET nào hùng mạnh hơn ngôn ngữ lập trình .NET nào. Và việc chọn ngôn ngữ là tùy thuộc vào lập trình viên. II.2 Các tính năng của chương trình II.2.1 Chuyển đổi ảnh màu sang ảnh xám Public Function ExecuteRgb8( _ByVal img As System.Drawing.Image) As System.Drawing.Image Dim result As Bitmap = New Bitmap(img) Dim bmpData As BitmapData = result.LockBits( _ New Rectangle(0, 0, result.Width, result.Height), _ ImageLockMode.ReadWrite, img.PixelFormat) Dim pixelBytes As Integer = _System.Drawing.Image.GetPixelFormatSize(img.PixelFormat) \ 8 'Get the address of the first line. Dim ptr As IntPtr = bmpData.Scan0 Dim size As Integer = bmpData.Stride * result.Height Dim pixels(size - 1) As Byte Dim index As Integer Nhóm thực hiện: Nhóm 1-L11CQCN12BTrang 8 Bài tập điều kiện II Môn: Xử lý ảnh Dim Y As Integer Dim mulR As Double = _factorRed / 100 Dim mulG As Double = _factorGreen / 100 Dim mulB As Double = _factorBlue / 100 'Copy the RGB values into the array. System.Runtime.InteropServices.Marshal.Copy(ptr, pixels, 0, size) 'Main loop. For row As Integer = 0 To result.Height - 1 For col As Integer = 0 To result.Width - 1 index = (row * bmpData.Stride) + (col * pixelBytes) Y = CInt(System.Math.Round( _ mulR * pixels(index + 2) + _ mulG * pixels(index + 1) + _ mulB * pixels(index + 0))) If (Y > 255) Then Y = 255 'Save new values. pixels(index + 2) = CByte(Y) pixels(index + 1) = CByte(Y) pixels(index + 0) = CByte(Y) Next Next 'Copy the RGB values back to the bitmap System.Runtime.InteropServices.Marshal.Copy(pixels, 0, ptr, size) 'Unlock the bits. result.UnlockBits(bmpData) Return result End Function Dưới đây là hình ảnh ví dụ để minh họa => Hình 2.1.Chuyển ảnh màu sang ảnh xám. II.2.2 Chuyển từ ảnh xám sang ảnh màu bằng mô hình màu HSI Execute filter and return filtered image. Public Overrides Function ExecuteFilter(ByVal img As System.Drawing.Image) As System.Drawing.Image Select Case img.PixelFormat Case PixelFormat.Format16bppGrayScale Return img Case PixelFormat.Format24bppRgb, _ Nhóm thực hiện: Nhóm 1-L11CQCN12BTrang 9 Bài tập điều kiện II Môn: Xử lý ảnh PixelFormat.Format32bppArgb, PixelFormat.Format32bppRgb Return ExecuteRgb8(img) Case PixelFormat.Format48bppRgb Return img Case Else Return img End Select End Function Execute filter on (A)RGB image with 8 bits per color. Private Function ExecuteRgb8(ByVal img As System.Drawing.Image) As System.Drawing.Image Const c1o60 As Double = 1 / 60 Const c1o255 As Double = 1 / 255 Dim result As Bitmap = New Bitmap(img) result.SetResolution(img.HorizontalResolution, img.VerticalResolution) Dim bmpData As BitmapData = result.LockBits( _ New Rectangle(0, 0, result.Width, result.Height), _ ImageLockMode.ReadWrite, img.PixelFormat) Dim pixelBytes As Integer = _ System.Drawing.Image.GetPixelFormatSize(img.PixelFormat) \ 8 'Get the address of the first line. Dim ptr As IntPtr = bmpData.Scan0 Dim size As Integer = bmpData.Stride * result.Height Dim pixels(size - 1) As Byte Dim index As Integer Dim R, G, B As Double Dim H, S, L, H1 As Double Dim min, max, dif, sum As Double Dim f1, f2 As Double Dim v1, v2, v3 As Double Dim sat As Double = 127 * _saturation / 100 Dim lum As Double = 127 * _intensity / 100 'Copy the RGB values into the array. System.Runtime.InteropServices.Marshal.Copy(ptr, pixels, 0, size) 'Main loop. For row As Integer = 0 To result.Height - 1 For col As Integer = 0 To result.Width - 1 index = (row * bmpData.Stride) + (col * pixelBytes) R = pixels(index + 2) G = pixels(index + 1) B = pixels(index + 0) 'Conversion to HSL space. min = R If (G < min) Then min = G If (B < min) Then min = B max = R : f1 = 0.0 : f2 = G - B If (G > max) Then max = G : f1 = 120.0 : f2 = B - R End If If (B > max) Then max = B : f1 = 240.0 : f2 = R - G End If Nhóm thực hiện: Nhóm 1-L11CQCN12BTrang 10 . Giảng viên hướng dẫn : Ths. Trịnh Thế Vinh Sinh viên thực hiện : Trương Hùng Anh Huỳnh Ngọc Tuân Lê Thị Thùy Liên Lê Phạm Thảo Quyên Đà nẵng, tháng 12/2012. Xử lý ảnh Hình 1.2. Mô hình màu HSV Sắc màu (Hue) hoặc H được đo bởi góc quanh trục đứng với màu đỏ là 0 o , màu lục là 20 o , màu lam là 240 o (xem hình