Đăng ký Đăng nhập
Trang chủ Báo cáo chuyên đề xử lý ảnh- các phương pháp dò biên...

Tài liệu Báo cáo chuyên đề xử lý ảnh- các phương pháp dò biên

.PDF
53
903
69

Mô tả:

Báo cáo chuyên đề xử lý ảnh- Các phương pháp dò biên
http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN Lời nói đầu .CO Chương I. TỔNG QUAN VỀ PHÂN TÍCH ẢNH M MỤC LỤC 1.Khái quát về biên và phân loại các kỹ thuật dò biên 1.1. Khái niệm về biên 1.2. Phân loại các kỹ thuật phát hiện biên OKS 2. Quá trình phát hiện biên Chương II. CÁC PHƯƠNG PHÁP DÒ BIÊN 1. Sự phân đoạn và dò biên 1.1. Thao tác vùng 1.2. Dò biên thô 1.3. Kết hợp các vùng OBO 2. Các phương pháp dò biên cơ bản 2.1. Phép lấy đạo hàm bậc nhất cho phương pháp dò biên 2.2. Phương pháp dò biên Sobel 2.3. Phép toán được quan tâm khác 3. Dò bậc hai 3.2. Dò biên màu KIL 3.1. Xác định cắt điểm không 4. Phương pháp dò biên Phương pháp dò biên Laplace 5. Phương pháp dò biên hình chóp(pyramid EDGE detection) 6. Crack edge relation(Tách giới hạn biên) 7. Kỹ thuật đạo hàm tích chập – phương pháp Canny 8. Dò biên theo quy hoach động 8.1. Mô tả phương pháp http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN 8.2. Thuật toán .CO Lời nói đầu M 9. Một số thuật toán khác Xử lý ảnh là một lĩnh vực đang được quan tâm và đã trở thành một môn học chuyên ngành của sinh viên hệ kĩ sư, hệ cử nhân ngành công nghệ thông tin, cũng như những ngành kĩ thuật khác trong các trường đại học kĩ thuật.Xử lý ảnh có liên OKS quan đến nhiều ngành khác như: Hệ thống tin học, lý thuyết thông tin, lý thuyết thống kê, trí tuệ nhân tạo, nhận dạng, v.v…Xử lý ảnh nghiên cứu tất cả những gì liên quan đến việc thao tác trên ảnh như: Biểu diễn ảnh, thu nhận ảnh, tăng cường và khôi phục ảnh nhằm thu được ảnh như mong muốn.Mỗi vấn đề đều cần có những xử lý về thuật toán tại mỗi điếm ảnh hay phần tử ảnh. Việc tìm hiểu giúp OBO chúng ta hiểu sâu hơn về cơ chế, nguyên tắc xử lý ảnh, điều chỉnh màu, độ sáng tối, độ tương phản,… làm cho hình ảnh đẹp và nghệ thuật hơn. Do đó xử lý ảnh là lĩnh vực được rất nhiều quan tâm và trở thành niềm đam mê của rất nhiều sinh viên. Trong bài báo cáo này, em xin đưa ra đề tài: Các phương pháp dò biên ảnh. Đặc biệt ở đây trình bày 2 thuật toán dò biên Sobel và Laplace bằng ngôn ngữ C. Để đạt được thành công, chúng ta cần sự nghiên cứu và trao đổi lẫn nhau. Vì vậy em rất thành cảm ơn! KIL mong sự tham gia của các bạn, đặc biệt là lời nhận xét của cô giáo. Em xin chân http://kilobooks.com OKS .CO M THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN OBO Chương I. TỔNG QUAN VỀ PHÂN TÍCH ẢNH Sau giai đoạn tiền xử lý ảnh, ảnh đã dược tăng cường hay khôi phục để làm nổi các đặc trưng chủ yếu.Giai đoạn phân tích ảnh gồm: trích chọn các đặc tính, sau đó phân đoạn ảnh thành các phần tử.Ví dụ như phân đoạn dựa theo biên, dựa theo vùng. Tùy theo các ứng dụng, giai đoạn tiếp theo có thành các lớp có miêu tả. thể là nhận dạng ảnh phân KIL Sơ đồ sau mô tả tóm lược các bước của quá trình phân tích ảnh: Ảnh đầu ra của Trích chọn đặc tính Phân đoạn Phân loại Giải thích http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN M Quá trình tiền xử lý .CO Sơ đồ: Các bước phân tích ảnh. OKS Các đặc trưng của ảnh thường gồm: mật độ xám, phân bố xác suất, phân bố không gian, biên ảnh. 1. Khái quát về biên và phân loại các kỹ thuật dò biên. 1.1. Khái niệm về biên: OBO Biên là một vấn đề chủ yếu trong phân tích ảnh vì các kỹ thuật phân đoạn ảnh chủ yếu dựa vào biên.Một điểm ảnh có thể coi là điểm biên nếu ở đó có sự thay đổi đột ngột về mức xám.Tập hợp các điểm biên tạo thành biên hay đường bao của ảnh.Ví dụ: trong một ảnh nhị phân, một điểm có thể gọi là biên nếu nó là điểm đen và có ít nhất một điểm trắng lân cận. Để hình dung tầm quan trọng của biên ta xét ví dụ sau: Khi người hoạ sĩ vẽ một KIL cái bàn gỗ, chỉ cần vài nét phác thảo về hình dáng như mặt bàn, chân bàn mà không cần thêm các chi tiết nào khác, người xem đã có thể nhận ra cái bàn.Nếu ứng dụng của ta là phân lớp nhận diện đối tượng thì coi như nhiệm vụ đã hoàn thành.Tuy nhiên nếu đòi hỏi thêm về các chi tiết khác như vân gỗ hay màu sắc… thì với chừng ấy thông tin là chưa đủ.Nhìn chung về mặt toán học người ta coi điểm biên của ảnh là điểm có sự biến đổi đột ngột về độ xám. http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN Như vậy, phát hiện biên một cách lý tưởng là xác định được tất cả cả các đường bao trong đối tượng. Định nghĩa toán học của biên ở trên là cơ sở cho các kỹ thuật phát hiện biên. Điều quan trọng là sự biến thiên mức xám giữa các điểm ảnh trong khá hơn. .CO 1.2. Phân loại các kỹ thuật phát hiện biên M một vùng thường là nhỏ, trong khi đó biến thiên mức xám của điểm giáp ranh lại Xuất phát từ định nghĩa toán học của biên người ta thường sử dụng 2 phương pháp phát hiện biên sau: - Phương pháp phát hiện biên trực tiếp: Phương pháp này nhằm làm nổi biên dựa vào sự biến thiên về giá trị độ sáng của điểm ảnh.Kỹ thuật chủ yếu dùng OKS phát hiện biên ở đây là kỹ thuật đạo hàm.Nếu lấy đạo hàm bậc nhất của ảnh, ta có phương pháp Gradient.Nếu lấy đạo hàm bậc hai, ta có phương pháp Laplace.Hai kỹ thuật trên gọi là phương pháp dò biên cục bộ.Ngoài ra, người ta cũng sử dụng phương pháp “đi theo đường bao” : dựa vào nguyên lý quy hoạch động và được gọi là phương pháp dò biên tổng thể. Phương pháp phát hiện biên gián tiếp: Bằng cách nào đó, ta phân được ảnh OBO - thành các vùng thì đường phân ranh giữa các vùng đó chính là biên.Việc phân vùng ảnh thường dựa vào kết cấu bề mặt ảnh. Kỹ thuật dò biên và phân vùng ảnh là hai bài toán đối ngẫu của nhau.Thực vậy, dò biên để thực hiện phân lớp đối tượng và một khi đã phân lớp xong có nghĩa là đã phân vùng được ảnh.Và ngược lại, khi đã phân vùng, ảnh đã phân lập được thành KIL các đối tượng, ta có thể phát hiện được biên.Phương pháp dò biên trực tiếp tỏ ra khá hiệu quả vì ít chịu ảnh hưởng của nhiễu.Nếu biến đổi gián tiếp tuy khó cài đặt, song lại áp dụng khá tốt khi sự biến thiên độ sáng nhỏ. 2.Quá trình phát hiện biên -Vì ảnh thu nhận thường có nhiễu nên bước đầu tiên là khử nhiễu. -Tiếp theo là tiến hành làm nổi biên bởi các toán tử đạo hàm. http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN - Định vị điểm biên.Vì các kỹ thuật làm nổi biên có hiệu ứng phụ là tăng nhiễu, do vậy sẽ có một điểm biên giả cần bị loại bỏ. Chương II.Các phương pháp dò biên 1.Sự phân đoạn và dò biên 1.1.Thao tác vùng .CO M -Liên kết và trích chọn biên. OKS Việc khám phá các vùng có thể là một việc rất đơn giản ,như được minh hoạ trong mục 1.1.1.tuy nhiên thường không nhiều hơn ,những vùng được yêu cầu mà bao trùm một vùng thật của ảnh hơn là mổh nhóm các diểm ảnh. 1.2.Dò biên thô Sử dụng: xem xét một hình ảnh như là một tập hợp các vùng . OBO thuật toán:dò biên thô không phải là một phương pháp phức tạp .những vùng đơn giản được xác định như vùng các điểm cùng mức xám , đường biên của các vùng là tách những điểm ảnh hơn tại vị trí điểm. như việc dò một vùng có thể đưa ra một số các vùng hữu ích (trừ khi số các mức xám là tương đối nhỏ ).như vậy một phương pháp đơn giản là nhóm lại những điểm ảnh vào trong hững phạm vi của những giá trị gần (q hoặc tự nhóm).các KIL vùng(miền) có thể là việc xem xét các biểu đồ hình ảnh để xác định tốt sự tự nhhóm cho mục đích vùng kết quả trong việc kết hợp toàn bộ mức xám vùng cơ sở nhiều hơn các mức xám của điểm ảnh mà nó gần với một vùng khác . 1.3. Kết hợp các vùng Việc kết hợp các vùng là rất hữu ích cho việc tách thô các mức xám và thực hiện một số kỹ thuật trên những vết rạn giữa những vùng_không làm tăng biên nhưng để http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN xác định khi toàn bộ các vùng cần phải nối (kết hợp_-như vậy làm giảm số các vùng từ việc tìm vùng thô ở trên . 2. Các phương pháp dò biên cơ bản M Biên của một hình ảnh giữ nhiều thông tin trong hình ảnh đó .các biên cho biết các đối tượng ở đâu ,hình dạng và kích thước của đối tượng,và cái gì đó để kết cấu của .CO đối tượng .biên là nơi cương độ của một hình ảnh di chuyển từ một giá trị thấp đến giá trị cao. Rất nhiều các ứng dụng cho phương pháp dò biên ,mà được sử dụng cho một số hiệu ứng đặc biệt .những nghệ sỹ kỹ thuật số sử dụng nó để làm rõ nét các đường nét của hình ảnh .kết quả của việc dò biên có thể đưa thêm vào hình ảnh để làm nổi OKS bật các đường biên. Biên trong ảnh là những vùng có cường độ tương phản mạnh, một bước nhảy từ điểm ảnh tới điểm ảnh kế tiếp.Dò biên một ảnh giúp giảm đáng kể số lượng và lọc ra những thông tin không hữu ích, trong khi đó bảo quản được các thuộc tính cấu trúc của ảnh.Có rất nhiều cách thực hiện dò biên.Tuy nhiên các phương pháp chính OBO khác nhau có thể được nhóm vào thành hai loại, Gradient và Laplacian.Phương pháp Gradient dò biên bằng cách tìm kiếm giá trị lớn nhất và giá trị nhỏ nhất trong đạo hàm bậc nhất của ảnh.Phương pháp Laplace tìm kiếm các vạch không trong đạo hàm bậc hai của ảnh để tìm biên.Biên có dạng một chiều và tính toán đạo hàm của ảnh có thể làm nổi vị trí đó.Chúng ta có thể sử dụng kí hiệu f(t) sau với biên chỉ KIL ra bước nhảy của cường độ bên dưới: http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN M Nếu ta lấy gradient của kí hiệu này ở dạng một chiều, chỉ ra đạo hàm bậc một của OBO OKS .CO biến t, ta nhận được: Rõ ràng đạo hàm bậc một cho xác định giá trị lớn nhất tại tâm của biên.Phương pháp xác định biên này là đặc trưng của nhóm lọc gradient nếu giá trị của gradient vượt quá vài ngưỡng.Như đã đề cập, biên sẽ có giá trị cường độ điểm ảnh cao hơn so với các vùng khác.Nên mỗi lần, một ngưỡng được đặt, ta có thể so sánh giá trị gradient với giá trị một ngưỡng và dò biên khi mà ngưỡng được mở rộng.Hơn nữa KIL khi mà đạo hàm bậc nhất đạt giá trị lớn nhất, đạo hàm bậc hai bằng 0.Một cách khác để tìm ra vị trí của biên là xác định các giá trị 0 của đạo hàm bậc hai của hàm bên dưới: http://kilobooks.com .CO M THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN Phương pháp dò biên thường bước đầu tiên là việc phân vùng hình ảnh .phân vùng ảnh là một lĩnh vực của phân tích ảnh , được sử dụng đểvnhóm những điểm vào trong các vùng để xác định thành phần cấu tạo một ảnh . một ví dụ phổ biến của phân vùng ảnh là”magic wand”( đũa thần ma thuật )công cụ OKS phần mền trong xử lý ảnh .công cụ này cho phép người dùng lựa chọn một diểm trong một hình ảnh .phần mền này vẽ một đường bao quanh những điểm có giá trị giống nhau.người dùng có thể lựa chọn một diểm trong vùng bầu trời và đuã thần ma thuật sẽ vẽ một đường bao kín vùng bầu trời trong ảnh .người dùng có thể sửa đổi màu của vùng trời mà không gây ra sự biến đổi màu cắc các dãy núi hoặc bất OBO cứ phần nào có mặt trong hình ảnh . phương pháp dò biên cũng sử dụng đăng ký (registration) ảnh .việc đăng ký hình ảnh sắp thẳng hàng hai hình ảnh mà có thể thu đựoc tại các phần mền riêng biệt KIL hoặt từ những phân tử nhảy khác nhau. roof edge line edge step edge ramp edge Hình1.1 Một số đường biên khác nhau. http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN Có rất nhiều các kiểu biên,về chiều và hình dạng (hình1.1).Một số biên là đường thẳng trong khi những biên khác được uốn cong bằng việc thay đổi giá trị radian.có rất nhiều phương pháp dò biên sử dụng tất cả ngững đường biên trên,từng cái có M những điểm mạnh của riêng nó .một vài phương pháp dò biêncó thể sử dụng tốt trong một số ứng dụng và thực hiện kém (không hiệu quả)trong ứng dụng khác. .CO Đôi khi nó được sử dụng thí nghiệm để xác định đâu là phương pháp dò biên tốt nhất cho một ứng dụng. Phương pháp dò biên đơn giản nhất và nhanh nhất là xác định giá trị cực đằit một loạt các phép thuần nhất (đồng nhất)trừ điểm ảnh.phép toán trừ mỗi 8 điểm ảnh phụ cận (vây quanh)từ một điểm trung tâm của một cửa sổ 3x3 trong hình 1.2 đầu ra OBO OKS của phép toán là giá trị tuyệt đối cực đại của mỗi phần khác nhau. homogenety operator KIL Phép toán đồng nhất 11 13 15 16 11 11 16 12 11 image ảnh Hình 1.2 sử dụng các thuật toán đồng nhất. http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN điểm ảnh mới=max{|11-11|,|11-13|,|11-15|,|11-16|,|11-11|,|11-16|,|11-12|,|11-11|}=5 Tương tự thuật toán thuần nhất là thiết bị dò biên khác .các thao tác của nó nhanh M hơn bởi vì nó chỉ phụ thuộc vào 4 phép trừ mỗi điểm ảnh khác với thuật toán thuần nhất cần 8 phép trừ.các phép trừ là phần trên trái -phần dưới phải,giữa trái -giữa .CO phải ,dưới trái –trên phải ,và giá trị giữa trên-giá trị dưới ở giữa(hình1.3) 13 15 16 11 11 OKS 11 12 16 homogenety operator image ảnh OBO Thuật toán thuần nhất 11 KIL Hình 1.3 Sử dụng thuật toán khác. điểm ảnh mới=max{|11-11|,|13-12|,|15-16|,|11-16|}=5 2.1. Phép lấy đạo hàm bậc nhất cho phương pháp dò biên. Nếu chúng ta đang tìm kiếm mọi đường biên nằm ngang nào nó sẽ nhận được tính toán sự khác nhau giữa một giá trị điểm và giá trị điểm tiếp theo,hoặc lên trên hoặc xuống từ đầu(được gọi là sự tách khác nhau)ví dụ giả thiết đỉnh trái gốc. http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN Hc=yk(x,y)=(x,y)-(x,y+1) trên thực tế nó tương đương với việc thu nhỏ hình với mẫu 2x1 M 1 .CO -1 Tương tự Hr=Xk(x,y)=(x,y)-(x-1,y) Sử dụng kết quả OKS -1 1 Hc và Hr là các giá trị xác định cột và dòng. Đôi khi nó rất tiện lợi để phát hoạ cả Xk và Yk việc kết hợp chúng tạo nên độ lớn gradien(ví dụ cường độ của biên).việc kết hợp chúng bằng việc gộp hoàn toàn chúng có thể cho giá trị trung bình hai biên loại bỏ ngoài lẫn nhau(một là xác thực,một là không xác thực),vì vậy nó là tốt nhất cho OBO việc tính tổng các giá trị thực(không cần quan tâm đến dấu )hoặc tính tông các bình phương của nó và khi đó có thể lấy căn bậc hai bình phương của kết quả thu được . Nó cũng chia Xk bởi Yk và xác định một chiều gradien(góc của biên ở giữa các vùng): KIL  Y_difference(x, y)  gradient_direction = tan −1    X_difference(x, y)  Độ lớn có thể tính bằng tổng vectơ Hc và Hr: H ( x, y) = H 2r ( x, y) + H c2 ( x, y) http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN Đôi khi cho việc tính toán đơn giản , độ lớn được tính là: M H( x, y) = H r ( x, y) + H c ( x, y) H c (x, y ) H r (x, y ) OKS θ = tan −1 .CO Việc định hướng biên có thể tìm bởi trong hình ảnh thực tế ,các hàng ít khi được định nghĩa tốt như vậy,thường thì sự thay đổi giữa các vùng là từ từvà sặc sỡ hơn. Hình ảnh sau đây là điển hình việc đọc biên.mẫu này đã càn để tính tỷung bình 0 0 0 0 0 0 2 0 3 3 0 0 0 1 0 0 0 2 4 2 0 0 2 0 3 4 3 3 2 3 0 0 1 3 3 4 3 3 3 3 0 1 0 4 3 3 2 4 3 2 0 0 1 2 3 3 4 4 4 3 OBO gradien thông qua một số các điểm ảnh ,hơn là việc tính toán với hai con số KIL Các toán tử đạo hàm được áp dụng khá nhiều. Ở đây ta chỉ xét một số toán tử tiêu biểu: Robert, Sobel,… 2.2. Phương pháp dò biên Sobel Toán tử sobel nhạy cảm với các biên chéo hơn so với các biên thẳng đứng và các biên nằm ngang.chuẩn sobel 3x3 thương đựoc sử dụng như: X http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN M −1 −2 −1 0 0 0 1 2 1 Y .CO −1 0 1 −2 0 2 −1 0 1 ảnh gốc : 0 0 0 0 0 0 2 1 0 1 0 3 0 0 2 3 0 0 4 4 2 0 3 3 0 2 3 3 3 4 2 3 OKS 0 0 0 0 3 2 3 3 0 1 0 4 3 3 2 4 3 2 0 0 1 2 3 3 4 4 4 3 OBO |A|+|B| 4 6 4 10 14 12 14 4 6 8 10 20 16 12 6 0 4 10 14 10 2 4 2 4 2 12 12 2 4 8 0 0 0 0 1 1 1 1 2 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 KIL giới hạn tại 12 2 0 1 1 0 0 0 0 8 http://kilobooks.com M THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN .CO Dựa trên phân tích một chiều, lý thuyết này có thể được áp dụng vào trường hợp hai chiều, tính toán được chính xác xấp xỉ đạo hàm ảnh hai chiều.Toán tử Sobel thực hiện phép đo gradient không gian hai chiều trong một ảnh. Điển hình nó được sử dụng tìm ra giá trị tuyệt đối xấp xỉ độ rộng gradient tại mỗi điểm trong độ xám OKS ảnh đầu vào.Phương pháp dò biên Sobel sử dụng cặp mặt nạ xoắn 3X3, ước lượng gradient theo cột x, hàng y.Một mặt nạ xoắn thường nhỏ hơn nhiều so với ảnh thực.Mặt nạ là slide trên ảnh, thao tác thực hiện các điểm ảnh trên cùng một KIL OBO lúc.Mặt nạ Sobel được chỉ ra ở hình dưới. Độ dài đường dốc được tính bởi công thức: Tính xấp xỉ: http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN |G| = |Gx| + |Gy| .CO FILE: edgeSob.c - WORKS!! M Mã của phương pháp dò biên Sobel : AUTH: Bill Green DESC: 2 3x3 Sobel masks for edge detection DATE: 07/23/02 REFS: edgeLap.c OKS */ #include #include #include OBO #include /*-------STRUCTURES---------*/ typedef struct {int rows; int cols; unsigned char* data;} sImage; /*-------PROTOTYPES---------*/ KIL long getImageInfo(FILE*, long, int); void copyImageInfo(FILE* inputFile, FILE* outputFile); void copyColorTable(FILE* inputFile, FILE* outputFile, int nColors); int main(int argc, char* argv[]) { FILE *bmpInput, *bmpOutput; http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN sImage originalImage; sImage edgeImage; X, Y; I, J; long sumX, sumY; int nColors, SUM; unsigned long vectorSize; unsigned long fileSize; int GX[3][3]; int GY[3][3]; unsigned char *pChar, someChar; row, col; OKS unsigned int M int .CO unsigned int someChar = '0'; pChar = &someChar; OBO /* 3x3 GX Sobel mask. Ref: www.cee.hw.ac.uk/hipr/html/sobel.html */ 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 */ KIL 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(argc < 2) { printf("Usage: %s bmpInput.bmp\n", argv[0]); exit(0); http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN }; printf("Reading filename %s\n", argv[1]); bmpInput = fopen(argv[1], "rb"); .CO bmpOutput = fopen("edgeSob.bmp", "wb"); M /*-------DECLARE INPUT & OUTPUT FILES-------*/ /*---SET POINTER TO BEGINNING OF FILE----*/ fseek(bmpInput, 0L, SEEK_END); OKS /*-------GET INPUT BMP DATA--------*/ fileSize = getImageInfo(bmpInput, 2, 4); originalImage.cols = (int)getImageInfo(bmpInput, 18, 4); originalImage.rows = (int)getImageInfo(bmpInput, 22, 4); edgeImage.rows = originalImage.rows; OBO edgeImage.cols = originalImage.cols; /*--------PRINT DATA TO SCREEN----------*/ printf("Width: %d\n", originalImage.cols); printf("Height: %d\n", originalImage.rows); KIL printf("File size: %lu\n", fileSize); nColors = (int)getImageInfo(bmpInput, 46, 4); printf("nColors: %d\n", nColors); /*------ALLOCATE MEMORY FOR FILES--------*/ vectorSize = fileSize - (14+40+4*nColors); printf("vectorSize: %lu\n", vectorSize); http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN edgeImage.data = farmalloc(vectorSize*sizeof(unsigned char)); if(edgeImage.data == NULL) { printf("Failed to malloc edgeImage.data\n"); M exit(0); } .CO printf("%lu bytes malloc'ed for edgeImage.data\n", vectorSize); originalImage.data = farmalloc(vectorSize*sizeof(unsigned char)); if(originalImage.data == NULL) { printf("Failed to malloc originalImage.data\n"); OKS exit(0); } printf("%lu bytes malloc'ed for originalImage.datt\n", vectorSize); /*------COPY HEADER AND COLOR TABLE---------*/ OBO copyImageInfo(bmpInput, bmpOutput); copyColorTable(bmpInput, bmpOutput, nColors); fseek(bmpInput, (14+40+4*nColors), SEEK_SET); fseek(bmpOutput, (14+40+4*nColors), SEEK_SET); /* Read input.bmp and store it's raster data into originalImage.data */ KIL for(row=0; row<=originalImage.rows-1; row++) { for(col=0; col<=originalImage.cols-1; col++) { fread(pChar, sizeof(char), 1, bmpInput); *(originalImage.data + row*originalImage.cols + col) = *pChar; } } http://kilobooks.com THÖ VIEÄN ÑIEÄN TÖÛ TRÖÏC TUYEÁN /*--------------------------------------------------SOBEL ALGORITHM STARTS HERE for(Y=0; Y<=(originalImage.rows-1); Y++) { M ---------------------------------------------------*/ for(X=0; X<=(originalImage.cols-1); X++) { .CO sumX = 0; sumY = 0; /* image boundaries */ if(Y==0 || Y==originalImage.rows-1) OKS SUM = 0; else if(X==0 || X==originalImage.cols-1) SUM = 0; else { OBO /* Convolution starts here */ /*-------X GRADIENT APPROXIMATION------*/ for(I=-1; I<=1; I++) { for(J=-1; J<=1; J++) { sumX = sumX + (int)( (*(originalImage.data + X + I + (Y + } } KIL J)*originalImage.cols)) * GX[I+1][J+1]); if(sumX>255) sumX=255; if(sumX<0) sumX=0; /*-------Y GRADIENT APPROXIMATION-------*/
- Xem thêm -

Tài liệu liên quan