Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 66 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
66
Dung lượng
1,93 MB
Nội dung
MỤC LỤC MỞ ĐẦU Chương TỔNG QUAN VỀ PHÂN ĐOẠN ẢNH 1.1 Đối tượng ảnh 1.2 Biểu đồ cột giá trị xám (Histogram) 1.3 Làm trơn tăng độ tương phản .7 1.4 Biểu đồ cột độ bó chặt Chương MỘT SỐ PHƯƠNG PHÁP PHÂN ĐOẠN ẢNH 2.1 Phân vùng ảnh dựa theo ngưỡng biên độ .9 2.1.1 Ngưỡng cố định 10 2.1.2 Ngưỡng tự động 11 2.1.2.1 Phương pháp sử dụng điểm biên 11 2.1.2.2 Phương pháp lặp 12 2.1.2.3 Phương pháp sử dụng biểu đồ mức xám 13 2.2 Phương pháp nới lỏng 14 2.3 Phương pháp phân vùng theo miền đồng 15 2.3.1 Cơ sở 16 2.3.2 Phương pháp tách tứ phân( quad tree) 16 2.3.3 Phương pháp phân vùng hợp 21 2.3.3.1 Thuật toán tô mầu 22 2.3.3.2 Thuật toán đệ quy cục 23 2.3.4 Phương pháp tách hợp 24 2.4 Phân vùng dựa theo đường biên 25 2.4.1 Phát biên làm biên 25 2.4.1.1 Phương pháp Gradient 28 2.4.1.2 Kỹ thuật Laplace 32 2.4.2 Làm mảnh biên 33 2.4.3 Nhị phân hoá đường biên 35 2.4.4 Miêu tả đường biên 35 2.4.4.1 Mã hoá theo toạ độ đề 37 2.4.4.2 Mã hoá Freeman 39 2.4.4.3 Xấp xỉ đoạn thẳng 42 2.5 Khảm Voronoi suy rộng cho phân đoạn ảnh giá trị véctơ 43 2.5.1 Khái quát chung 43 2.5.2 Khảm Voronoi suy rộng 44 2.5.2.1 Các định nghĩa 44 2.5.2.2 Phân đoạn ảnh số 46 2.5.3 Sự biến đổi đường 46 2.5.3.1 Các định nghĩa: 46 2.5.3.2 Định nghĩa thay đổi đường 47 2.5.3.3 Ứng dụng thay đổi đường vào phân đoạn ảnh mầu 48 2.5.4 Việc lựa chọn điểm nguồn 49 Chương 51 CÀI ĐẶT THỬ NGHIỆM MỘT SỐ THUẬT TOÁN PHÂN ĐOẠN ẢNH 51 3.1 Thuật toán phân đoạn ảnh dựa vào ngưỡng cố định 52 3.1.1 Tư tưởng thuật toán 52 3.1.2 Kết thực nghiệm nhận xét 54 3.2 Thuật toán tam giác 55 3.2.1 Tư tưởng thuật toán 55 3.2.2 Kết thực nghiệm nhận xét 59 3.3 Thuật toán Laplace 60 3.3.1 Tư tưởng thuật toán 60 3.3.2 Kết thực nghiệm nhận xét 63 3.4 Kết chương 63 KẾT LUẬN 65 TÀI LIỆU THAM KHẢO 66 MỞ ĐẦU Xử lý ảnh lĩnh vực có nhiều ứng dụng thực tế Môn học xử lý ảnh dạy tất trường đào tạo công nghệ thông tin điện tử viễn thông Là sinh viên công nghệ thông tin việc tìm hiểu nghiên cứu xử lý ảnh cần thiết Hơn ảnh dạng thông tin phổ biến Người ta sử dụng ảnh để minh hoạ, để biểu diễn thông tin… Nó trở thành công cụ thiếu hình thức lưu trữ, biểu diễn thông tin Và từ nhu cầu xử lý ảnh để phục vụ cho nhiều mục đích khác dẫn đến việc hình thành môn khoa học, có tên là: “Xử lý ảnh” Nó lĩnh vực trọng quan tâm Xử lý ảnh thường nhằm hai mục đích: thứ từ ảnh có biến đổi để thu ảnh có nhiều thông tin hơn, từ dễ dàng quan sát đánh giá mắt gọi biến đổi ảnh hay nâng cao chất lượng ảnh Mục đích thứ hai nhận dạng đoán ảnh cách tự động gọi nhận dạng ảnh Xử lý ảnh có nhiều ứng dụng làm ảnh y học, khôi phục lại ảnh tác dụng khí thiên văn học, tăng cường độ phân giải ảnh truyền hình mà không cần thay đổi cấu trúc bên hệ thống chuyển tải, nén ảnh truyền xa lưu trữ Ứng dụng lĩnh vực khoa học, hình sự, kinh tế chương trình xử lý, nhận dạng vân tay, nhận dạng loại tem sản phẩm… Quá trình xử lý ảnh bao gồm nhiều giai đoạn khác nhau, giai đoạn phải giải toán riêng, sau giai đoạn lắp ghép với thành khối bao gồm: thu nhận ảnh, tiền xử lý ảnh, phân đoạn ảnh, tách đặc tính phân loại Xác định đối tượng ảnh hầu hết ứng dụng liên quan đến xử lý ảnh máy tính Công việc gọi phân đoạn ảnh, phân đoạn nhằm phân chia đối tượng cần khảo sát ra khỏi phần nội dung lại ảnh; phân tách đối tượng tiếp giáp với phân tách đối tượng riêng biệt thành đối tượng để phục vụ cho bước Vì trình phân đoạn ảnh bước quan trọng kỹ thuật xử lý ảnh tự động Xuất phát từ vai trò quan trọng việc phân đoạn ảnh trình xử lý ảnh, năm vừa qua nhiều phương pháp phân đoạn ảnh tập chung nghiên cứu có nhiều thành công Trong đồ án này, em tìm hiểu cài đặt số thuật toán phân đoạn ảnh Đồ án chia thành ba chương Chương 1:Tổng quan phân đoạn ảnh Chương trình bày tổng quan phân đoạn ảnh bao gồm khái niệm Chương 2: Một số phương pháp phân đoạn ảnh Chương trình bày chi tiết số kỹ thuật phân đoạn ảnh Kỹ thuật phân vùng ảnh dựa theo ngưỡng biên độ gồm kỹ thuật phân ngưỡng tự động kỹ thuật phân ngưỡng cố định Kỹ thuật phân vùng ảnh dựa theo miền đồng gồm phương pháp: phương pháp tách tứ phân, phương pháp phân vùng hợp phương pháp tổng hợp Và kỹ thuật phân vùng dựa theo đường biên gồm bước phát làm biên, làm mảnh biên, nhị phân hoá đường biên, mô tả biên Chương 3: Cài đặt thử nghiệm số thuật toán phân đoạn ảnh Chương mô tả chi tiết ba thuật toán phân đoạn ảnh là: phân đoạn ảnh dựa theo ngưỡng cố định, phân đoạn ảnh theo thuật toán tam giácvà phân đoạn ảnh dựa theo đường biên Chương TỔNG QUAN VỀ PHÂN ĐOẠN ẢNH Vì lượng thông tin ảnh lớn, đa số ứng dụng cần số thông tin đặc trưng đó, phân đoạn ảnh trình giảm lượng thông tin khổng lồ mà giữ đặc trưng cần thiết Nhiệm vụ trình phân đoạn ảnh từ ảnh có lấy “đối tượng đáng quan tâm “ ảnh phục vụ cho bước trình xử lý ảnh Quá trình phân đoạn chia tách đối tượng khỏi nền, lựa chọn ảnh riêng lẻ từ sưu tập ảnh đối tượng phân tách đối tượng phủ lên Đây bước quan trọng trình xử lý ảnh, giai đoạn nhằm phân ảnh thành vùng ảnh khác Mỗi vùng ảnh tập điểm ảnh có tính chất dựa theo đường biên hay vùng liên thông Tiêu chuẩn để xác định theo miền liên thông hay gọi kỹ thuật phân vùng dựa theo miền đồng nhất, tiêu chuẩn để xác định mức xám, mầu hay độ nhám Nếu phân vùng dựa theo biên gọi kỹ thuật phân vùng biên Ngoài có kỹ thuật khác phân vùng theo biên độ hay phân vùng theo kết cấu Quá trình phân đoạn ảnh trình phân loại điểm ảnh ta phân biệt điểm ảnh điểm ảnh đối tượng Một đặc tính vô quan trọng giá trị xám Nhưng tính chất cục tính chất phổ điểm ảnh riêng lẻ đặc tính sử dụng, chúng tỏ thích hợp phân đoạn theo cách phân loại ảnh Kết phân đoạn ảnh logic, mặt phẳng đối tượng qua phân đoạn gán cho tên gọi giá trị xám, hay ảnh nhị phân, điểm đối tượng có giá trị 1, điểm có giá trị Quá trình phân đoạn ảnh trình mang nặng tính chủ quan Ở đây, trình đánh giá mắt đóng vai trò quan trọng mẫu mực, bề mặt hệ thống phân giải có suất đến mức ngạc nhiên Đáng tiếc trình xảy hệ thống thị giác chưa thể hiểu cách thấu đáo Do thật khó mà đặt tiêu chuẩn để dễ dàng đánh giá kết chất lượng trình phân đoạn Một tiêu chuẩn để đánh giá trình phân đoạn vi sai bề mặt mặt phẳng phân đoạn quan sát mắt mặt phẳng phân đoạn tìm thấy cách tự động Muốn thế, ta tính tổng bình phương khoảng cách điểm biên hai mặt phẳng phân đoạn Mặt phẳng phân đoạn tìm thấy cách tự động lệch khỏi mặt phẳng phân đoạn quan sát mắt nhiều bình phương khoảng cách trở lên lớn kết trình phân đoạn Quá trình phân đoạn chia thành hai loại: phân đoạn trọn vẹn phân đoạn không trọn vẹn Khi phương pháp dẫn đến kết đường biên quen thuộc phương pháp phân đoạn trọn vẹn, chẳng hạn phương pháp giá trị ngưỡng, phương pháp dẫn đến kết đường biên có lỗi chỗ khuyết phương pháp phân đoạn không trọn vẹn, chẳng hạn trình lọc gradient ảnh 1.1 Đối tượng ảnh Hai điểm ảnh P1,P2 Є E, E J J gọi liên thông ( hay liên thông) E tồn tập điểm gọi “đường đi” (i , j ), …,(i n , j n ), cho (i , j ) = P1, (i n , j n ) = P2, (i r , j r ) Є E (i r , j r ) 8_ láng giềng ( hay láng giềng) (i r 1 ,j r 1 )với r=1,2,…,n Quan hệ “k_liên thông E” k=4,8 quan hệ phản xạ, đối xứng, bắc cầu quan hệ tương đương Mỗi lớp tương đương gọi thành phần k_liên thông ảnh Về sau ta gọi thành phần k_liên thông ảnh đối tượng ảnh 1.2 Biểu đồ cột giá trị xám (Histogram) Histogram cấp sáng i tần suất xuất giá trị i ảnh, ký hiệu h(i) Từ biểu đồ giá trị xám suy diễn tính chất quan trọng ảnh, giá trị xám trung bình độ lệch tiêu chuẩn Qua tác động lên điểm ảnh, phân bố biểu đồ cột thay đổi theo mục đích Biểu đồ cột trở lên cần thiết để xác định ngưỡng thích hợp dùng cho trình phân đoạn Khi tiến hành phân tích thống kê chiều ảnh, từ phân bố biểu đồ cột tuyệt đối hay phân bố xác suất p(i) P(i) P(i) = h (i ) N i i P (i ) =1 i iu N số điểm ảnh đoạn ảnh mà ta khảo sát Biểu đồ cột có giá trị xám nhỏ i u giá trị xám lớn i Giá trị trung bình số học giá trị i tính từ histogram _ x0 x = x p ( x) x xu i0 _ (x x ) p ( x) x iu 1.3 Làm trơn tăng độ tương phản Để phân đoạn đạt kết tốt hơn, trước sử dụng phương pháp giá trị ngưỡng ta nên làm trơn ảnh nhờ lọc Sau làm trơn mặt phẳng tìm kiếm bó chặt hơn, lỗ trống mặt phẳng lấp đầy phần Dựa tính chất độ dốc gờ cạnh tác dụng làm trơn, lọc điểm tỏ đặc biệt thích hợp để làm trơn trước phân đoạn Việc làm tăng độ tương phản tỏ hữu ích tiến hành xử lý trước theo phương pháp ngưỡng Bằng việc làm tăng độ tương phản, tăng khác giá trị đối tượng, độ dốc cạnh đối tượng tăng lên Do sau làm tăng độ tương phản ta tìm giá trị T thích hợp với vùng sáng lớn 1.4 Biểu đồ cột độ bó chặt Ở số ứng dụng xác định, biểu đồ cột dùng cho độ bó chặt tỏ thích hợp, nhờ mà nhận biết số tính chất toàn cục điểm ảnh độ bó chặt Độ bó chặt K T ngưỡng T cho trước tính toán theo: KT = U T2 4FT Với F T diện tích ảnh phân đoạn U T2 chu vi bề mặt F T Ngưỡng T Giá trị F T trở thành đối tượng vòng tròn K T có giá trị lớn nhiều đối tượng có dạng nứt nẻ tồn ảnh có giá trị nhỏ có đối tượng tròn Độ bó chặt U /F giá trị thường gọi hệ số hình dạng Với biểu đồ cột bó chặt, ta không tìm thấy giá trị ngưỡng thích hợp việc phân đoạn mà qua ta thấy phương pháp tỏ thích hợp để nhận biết lớp đối tượng khác Chương MỘT SỐ PHƯƠNG PHÁP PHÂN ĐOẠN ẢNH 2.1 Phân vùng ảnh dựa theo ngưỡng biên độ Đặc tính đơn giản hữu ích ảnh biên độ tính chất vật lý ảnh như: độ phản xạ, độ truyền sáng, màu sắc đáp ứng đa phổ Thí dụ, ảnh X-quang, biên độ mức xám biểu diễn đặc tính bão hoà phần hấp thụ thể làm cho ta có khả phân biệt xương với phần mềm, tế bào lành với tế bào bị nhiễm bệnh… Như vậy, dùng ngưỡng biên độ để phân vùng mà biên độ đủ lớn đặc trưng cho ảnh Thí dụ, biên độ cảm biến ảnh hồng ngoại phản ánh vùng nhiệt độ thấp hay vùng có nhiệt độ cao Kỹ thuật phân ngưỡng theo biên độ có ích ảnh nhị phân văn in, đồ hoạ, ảnh màu hay ảnh X-quang Phân ngưỡng phương pháp định hướng điểm tập trung vào tính chất điểm ảnh định xem liệu điểm ảnh có thuộc đối tượng hay không Tính chất giá trị xám, mầu tính chất cục Để định ta tìm vào ngưỡng tối ưu, gọi phương pháp phân ngưỡng Phân ngưỡng phương pháp phân đoạn thông dụng nhằm biến ảnh đa cấp xám thành ảnh nhị phân( có mầu đen trắng) Việc chọn ngưỡng tối ưu thách thức Bên cạnh vai trò công cụ phân đoạn ảnh, bước nhiều kỹ thuật phân đoạn ảnh cấp cao không gian Trước hết cần đưa ảnh nhị phân cách đơn giản giá trị ngưỡng Các điểm ảnh ngưỡng T đối tượng ngưỡng T điểm Ta có hàm biến đổi tổng quát : 1, B( x, y ) T với T 255 A( x, y ) 0, B( x, y ) T (2.1) Hàm thực hoá bảng dò tìm (LUT - Look Up Table) ảnh xám B( x, y) biến đổi thành ảnh nhị phân AT ( x, y ), hay gọi trình nhị phân hoá Phương pháp ngưỡng vừa trình bày phân loại điểm ảnh dựa tính chất “giá trị xám” điểm đối tượng điểm Đặc điểm vùng lân cận điểm ảnh không quan tâm đến Khi định xem điểm ảnh có thuộc đối tượng hay không phương pháp hướng theo giá trị xám điểm ảnh Một kết ý đòi hỏi có ngưỡng tối ưu xác định, ngưỡng dễ dàng tìm nhiều ứng dụng Một số phương pháp sử dụng để tìm Đơn giản dùng ngưỡng cố định ảnh có độ sáng tối rõ ràng Nhưng để tìm ngưỡng cách tối ưu với ảnh độ sáng tối rõ ràng dùng đến phương pháp tìm ngưỡng tự động 2.1.1 Ngưỡng cố định Các ảnh với đối tượng sáng tối đối tượng tối sáng phân đoạn tương đối tốt cách lựa chọn ngưỡng cố định Ngưỡng người sử dụng lựa chọn tùy theo ảnh, ta mặc đinh T = 128 Ngưỡng T chọn cho điểm có màu sáng điểm (phân bố biểu đồ cột bên phải T) điểm tối thuộc đối tượng (phân bố biểu đồ cột bên trái T) phân tách hình Hình 2.1.a: Ảnh gốc Hình 2.1.b: Histogram điểm đánh dấu ngưỡng T = 128 10 Hình2.1.c: Ảnh nhị phân với ngưỡng T=128 3.1 Thuật toán phân đoạn ảnh dựa vào ngưỡng cố định 3.1.1 Tư tưởng thuật toán Đây thuật toán tương đối đơn giản Ý tưởng thuật toán phân ngưỡng ảnh giá trị xám cố định độc lập với liệu ảnh Giá trị xám người sử dụng lựa chọn mặc định giá trị Trong cài đặt này, em mặc định chọn T = 128 Thuật toán áp dụng biết trước chương trình làm việc với ảnh có độ tương phản cao Trong khi, đối tượng quan tâm tối gần sáng ngược lại, giá trị ngưỡng áp dụng 128 thang độ sáng từ đến 255 Với ảnh 128 giá trị ngưỡng tốt Và có ảnh bị phân vùng sai a Ảnh gốc b Ảnh phân vùng Hình 3.2: Phân đoạn dùng ngưỡng cố định T = 128 Các bước tiến trình cài đặt thuật toán mô tả đây: 1) Chuyển ảnh gốc ảnh xám 256 màu: /// /// Chuyển thành ảnh xám /// /// ảnh đầu vào /// trả lại ảnh bitmap public static Bitmap Anhxam(Image anh) { Rectangle bounds = new Rectangle(0, 0, anh.Width, anh.Height); Bitmap b = new Bitmap(anh.Width, anh.Height, PixelFormat.Format24bppRgb); using (Graphics g = Graphics.FromImage(b)) { g.PageUnit = GraphicsUnit.Pixel; g.DrawImage(anh, bounds); } 52 BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); int stride = bmData.Stride; System.IntPtr Scan0 = bmData.Scan0; unsafe { byte* p = (byte*)(void*)Scan0; int nOffset = stride - b.Width * 3; byte red, green, blue; for (int y = 0; y < b.Height; ++y) { for (int x = 0; x < b.Width; ++x) { blue = p[0]; green = p[1]; red = p[2]; p[0] = p[1] = p[2] = (byte)(.299 * red + 587 * green + 114 * blue); p += 3; } p += nOffset; } } b.UnlockBits(bmData); return b; } 2) Biến đổi ảnh xám thành ảnh nhị phân: Chọn ngưỡng T cho trình phân đoạn; for (int y = 0; y < anh.Height; ++y) { for (int x = 0; x < anh.Width; ++x) { if ((byte)p[0] < T) p[0] = p[1] = p[2] = 0; else p[0] = p[1] = p[2] = 255; p += 3; } p += nOffset; } Dưới đoạn mã phân ngưỡng ảnh dựa thuật toán ngưỡng cố định (lựa chọn T=128): /// /// Chuyển sang ảnh nhị phân /// /// /// ảnh đầu vào ảnh xám /// ảnh nhị phân public static Bitmap NhiPhan(Bitmap a) { Bitmap anh = Anhxam(a); 53 BitmapData bmData = anh.LockBits(new Rectangle(0, 0, anh.Width, anh.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); int stride = bmData.Stride; int nOffset = stride - anh.Width * 3; byte* p = (byte*)(void*)bmData.Scan0; int T = 128; for (int y = 0; y < anh.Height; ++y) { for (int x = 0; x < anh.Width; ++x) { if ((byte)p[0] < T) p[0] = p[1] = p[2] = 0; else p[0] = p[1] = p[2] = 255; p += 3; } p += nOffset; } anh.UnlockBits(bmData); return anh; } 3.1.2 Kết thực nghiệm nhận xét Thuật toán có số ưu, nhược điểm đánh đây: Ưu điểm: - Thuật toán có tư tưởng đơn giản nên dễ cài đặt - Tốc độ tính toán nhanh - Có thể áp dụng ảnh thuộc nhiều thể loại cho kết tương đối tốt với điều kiện đối tượng ảnh phải có mức độ sáng tối rõ ràng Nhược điểm: - Kết phân đoạn không tốt với ảnh mà đối tượng ảnh tối sáng - Với ảnh mà đối tượng ảnh có phần tối, phần sáng phân đoạn không xác 54 ảnh gốc ảnh phân vùng Hình 3.3: ảnh phân vùng với ngưỡng cố định (T=128) 3.2 Thuật toán tam giác 3.2.1 Tư tưởng thuật toán Thuật toán tam giác cải tiến ngưỡng cố định Ngưỡng xác định tuỳ theo liệu ảnh Ý tưởng thuật toán tìm thung lũng đỉnh phù hợp làm ngưỡng phân đoạn ảnh Thuật toán đề xuất Zack Các bước cài đặt thuật toán mô tả sau: 1) Chuyển ảnh gốc ảnh xám 256 màu: /// /// Chuyển thành ảnh xám /// /// ảnh đầu vào /// trả lại ảnh bitmap public static Bitmap Anhxam(Image anh) { Rectangle bounds = new Rectangle(0, 0, anh.Width, anh.Height); Bitmap b = new Bitmap(anh.Width, anh.Height, PixelFormat.Format24bppRgb); using (Graphics g = Graphics.FromImage(b)) { g.PageUnit = GraphicsUnit.Pixel; g.DrawImage(anh, bounds); } BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); int stride = bmData.Stride; System.IntPtr Scan0 = bmData.Scan0; unsafe { byte* p = (byte*)(void*)Scan0; int nOffset = stride - b.Width * 3; byte red, green, blue; for (int y = 0; y < b.Height; ++y) { for (int x = 0; x < b.Width; ++x) { blue = p[0]; 55 green = p[1]; red = p[2]; p[0] = p[1] = p[2] = (byte)(.299 * red + 587 * green + 114 * blue); p += 3; } p += nOffset; } } b.UnlockBits(bmData); return b; } 2) Biến đổi ảnh xám thành ảnh nhị phân: Tính toán giá trị ngưỡng T: f) Tính Histogram ảnh xám g) Tìm dải giá trị cấp xám chạy từ Bmin đến Bmin (với giá trị Histogram tương ứng H ; H ) tìm Bmax để Histogram đạt cực đại ( H max ) h) Tính khoảng cách d từ đường Histogram tới H H max (hoặc H max H ) Tìm giá trị cấp xám B, mà d đạt cực đại i) Gán ngưỡng T = B Phân ngưỡng ảnh (chuyển ảnh xám thành ảnh nhị phân): for(int y = 0; y < anh.Height; ++y) { for(int x = 0; x < anh.Width; ++x ) { if ((byte)p[0] < nguong) p[0] = p[1] = p[2] = 0; else p[0] = p[1] = p[2] = 255; p += 3; } p += nOffset; } 56 a) Ảnh gốc b) Histogram ảnh xám c) Kết phân ngưỡng Hình 3.4: Phân đoạn với ngưỡng tính theo thuật toán tam giác (dựa histogram ảnh xám) Số điểm ảnh H max d HB H H Bmin B Bmax Giá trị độ sáng Hình 3.5: Hình vẽ minh hoạ cách tính giá trị d nửa biểu đồ xám Dưới đoạn mã tính giá trị d nửa biểu đồ xám, từ đưa nguỡng T cài đặt hàm Nhiphan(): /// /// Chuyển sang ảnh nhị phân /// /// ảnh đầu vào ảnh xám /// ảnh nhị phân public static Bitmap NhiPhan(Bitmap a) { Bitmap anh = Anhxam(a); BitmapData bmData = anh.LockBits(new Rectangle(0, 0, anh.Width, anh.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); int stride = bmData.Stride; int nOffset = stride - anh.Width*3; int[] hist = new int[256]; double[] d = new double[256]; int nguong; int min, max; int Bmax; 57 byte * p = (byte *)(void *)bmData.Scan0; for(int y = 0; y < anh.Height; ++y) { for(int x = 0; x < anh.Width; ++x ) { hist[(byte)p[0]] += 1; p += 3; } p += nOffset; } = 0; while (hist[min] == 0) += 1; max = 255; while (hist[max] == 0) max -= 1; Bmax = min; for (int i = min+1; i hist[Bmax]) Bmax = i; double[] tam = new double[256]; double[] canh1 = new double[256]; double[] canh2 = new double[256]; double[] canh3 = new double[256]; for (int B=min+1; B