1. Trang chủ
  2. » Giáo Dục - Đào Tạo

PYTHON và vấn đề xử lý ẢNH đồ án i GIỚI THIỆU NGÔN NGỮ lập TRÌNH PYTHON

73 102 2

Đ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ơ bản

Định dạng
Số trang 73
Dung lượng 4,61 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • I. Hệ thống xử lý ảnh (7)
  • II. Những khái niệm cơ bản trong xử lý ảnh (8)
    • 1. Ảnh số và điểm ảnh (8)
    • 2. Độ phân giải hình ảnh (9)
    • 3. Mức xám của ảnh (10)
    • 4. Độ sâu màu của ảnh số (10)
  • CHƯƠNG 3: XỬ LÝ ẢNH VỚI THƯ VIỆN OPENCV (13)
    • I. Làm quen với thư viện OpenCV (13)
      • 1. Đọc, hiển thị và lưu file ảnh (13)
      • 2. Cắt, xoay và thay đổi kích thước ảnh (17)
    • II. Cải thiện và nâng cấp ảnh (24)
      • 1. Toán tử trên điểm ảnh (24)
        • 1.1. Một số phép biến đổi cấp xám cơ bản (24)
        • 1.2. Cắt ngưỡng (30)
        • 1.3. Trích chọn bit (31)
        • 1.4. Histogram (36)
      • 2. Toán tử trên miền không gian (40)
        • 1.1. Lọc mịn ảnh (40)
        • 1.2. Lọc sắc nét ảnh (47)
      • 2. Toán tử trên miền tần số (54)
        • 3.1. Biến đổi Fourier (54)
        • 3.2. Lọc thông thấp (làm mịn ảnh) (57)
        • 3.3. Lọc thông cao (làm sắc nét ảnh) (58)
    • III. Khôi phục ảnh (60)
      • 1. Nhiễu trong ảnh (61)
        • 1.1. Khái niệm (61)
        • 1.2. Một số mô hình nhiễu (61)
      • 2. Lọc nhiễu trong ảnh (64)
      • 1. Phân vùng ảnh dựa trên kỹ thuật cắt ngưỡng toàn cục (69)
      • 2. Phân vùng ảnh dựa trên thuộc tính vùng ảnh (71)
        • 2.1.1. Thuật toán nở vùng (71)
        • 2.1.2. Thuật toán tách và gộp các vùng ảnh (72)
  • Tài liệu tham khảo (73)

Nội dung

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT Giai đoạn này ta tiến hành các bước như: cải thiện nâng cấp ảnh, sửa lỗi, khôi phục ảnh; phân tách đặc trưng: tách biên, phân vùng ảnh; biể

Hệ thống xử lý ảnh

Xử lý ảnh là một phân ngành quan trọng của xử lý số tín hiệu, tập trung vào việc chỉnh sửa và cải thiện hình ảnh Các nghiên cứu về sự thay đổi trạng thái ban đầu của ảnh nhằm nâng cao khả năng truyền tải thông tin trực quan theo cách hiểu của con người Quá trình này cũng liên quan đến nén ảnh để giảm dung lượng dữ liệu hoặc điều chỉnh hình ảnh phù hợp với khả năng cảm nhận của máy móc.

Các chức năng xử lý ảnh chủ yếu tạo ra hình ảnh mới đã được chỉnh sửa, can thiệp để nâng cao chất lượng hoặc phân tích nội dung Các phương pháp xử lý ảnh tập trung vào hai ứng dụng chính là nâng cao chất lượng ảnh và phân tích hình ảnh Quá trình xử lý ảnh gồm các bước chính giúp cải thiện và phân tích dữ liệu hình ảnh một cách hiệu quả.

Hình 2.1 trình bày hệ thống xử lý ảnh bao gồm các bước thu nhận ảnh, chụp ảnh và số hóa ảnh Quá trình này bắt đầu khi ảnh được thu nhận qua các thiết bị như camera, sensor hoặc scanner, sau đó các tín hiệu hình ảnh sẽ được số hóa để xử lý tiếp Các yếu tố quan trọng trong bước này gồm độ phân giải, chất lượng màu, dung lượng bộ nhớ và tốc độ thu nhận ảnh của các thiết bị, ảnh hưởng trực tiếp đến chất lượng và hiệu quả của quá trình xử lý ảnh sau này.

Phân tích ảnh và thị giác máy tính

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Trong giai đoạn này, chúng ta tiến hành nâng cấp và khôi phục ảnh, sửa lỗi để cải thiện chất lượng hình ảnh Tiếp theo, quá trình phân tách đặc trưng được thực hiện bằng cách tách biên và phân vùng ảnh nhằm xác định các thành phần chính Sau đó, biểu diễn và xử lý đặc trưng hình dạng đối tượng trong ảnh giúp nâng cao khả năng nhận diện Cuối cùng, nhận dạng đối tượng, phân tích cảnh và hiểu cảnh đóng vai trò quan trọng trong việc hiểu nội dung và ý nghĩa của hình ảnh một cách toàn diện.

Sau khi hoàn tất bước Thu nhận ảnh, chụp ảnh và số hóa ảnh, chúng ta bước vào giai đoạn tiền xử lý để nâng cao chất lượng hình ảnh Trong giai đoạn này, ảnh sẽ được cải thiện về độ tương phản, khử nhiễu, loại bỏ bóng và điều chỉnh độ lệch để chuẩn bị tốt cho các bước xử lý sâu hơn Quá trình tiền xử lý đóng vai trò quan trọng trong việc đảm bảo hình ảnh đạt chuẩn, giúp tăng độ chính xác và hiệu quả cho các bước phân tích tiếp theo.

Phân vùng ảnh, hay còn gọi là phân đoạn ảnh, là kỹ thuật tách ảnh đầu vào thành các vùng thành phần có cùng đặc tính, dựa trên biên hoặc các vùng liên thông trong ảnh Quá trình này giúp xác định các đối tượng hoặc khu vực quan trọng trong hình ảnh một cách chính xác và hiệu quả Phân vùng ảnh là bước quan trọng trong xử lý ảnh nhằm phân tích và hiểu rõ nội dung hình ảnh một cách rõ ràng hơn.

Trong quá trình nhận diện ảnh, việc chọn các tính chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature Selection) Quá trình này liên quan đến việc tách các đặc tính của ảnh thành các thông tin định lượng, giúp phân biệt các lớp đối tượng khác nhau trong hình ảnh Ví dụ, trong nhận dạng ký tự trên phong bì thư, việc mô tả các đặc trưng của từng ký tự đóng vai trò quan trọng trong việc phân biệt ký tự này với ký tự khác.

Những khái niệm cơ bản trong xử lý ảnh

Ảnh số và điểm ảnh

Ảnh gốc, còn gọi là ảnh tự nhiên, là ảnh liên tục về không gian và độ sáng, đòi hỏi phải số hóa để xử lý hiệu quả Việc số hóa ảnh nghĩa là biến đổi gần đúng từ ảnh liên tục thành tập điểm phù hợp về vị trí và độ sáng, trong đó mỗi điểm gọi là điểm ảnh (pixel) Khoảng cách giữa các pixel được thiết lập phù hợp để mắt người dùng bình thường không phân biệt ranh giới giữa chúng, giúp duy trì độ chân thực của hình ảnh.

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Như vậy, xét về mặt toán học, ảnh số là một hàm hai biến f(x,y) , với x, y là các tọa độ

Trong hình ảnh kỹ thuật số, mỗi điểm có tọa độ (x,y) tương ứng với một pixel và giá trị số tại điểm này chính là giá trị xám của pixel đó Giá trị xám tại mỗi điểm luôn nằm trong khoảng hữu hạn từ 0 đến phần tử tối đa f_max, đảm bảo độ trung thực và chính xác của hình ảnh Điều này giúp xác định rõ ràng mức độ sáng tối của từng pixel, từ đó phục vụ các ứng dụng xử lý hình ảnh và phân tích dữ liệu hình ảnh một cách hiệu quả.

Độ phân giải hình ảnh

Độ phân giải hình ảnh (image resolution) đo lường lượng thông tin chứa trong một tập tin ảnh hiển thị trên màn hình, phản ánh số điểm ảnh (pixel) trong hình ảnh số đó Đơn vị dùng để đo độ phân giải là pixel hoặc megapixel, trong đó 1 megapixel bằng 1 tỷ pixel (10⁹ pixel) Việc hiểu rõ về độ phân giải giúp người dùng đánh giá chất lượng hình ảnh, từ đó chọn lựa phù hợp cho các mục đích sử dụng khác nhau.

Rõ ràng, độ phân giải càng thấp thì ảnh càng mờ:

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Hình 2.3 Độ phân giải ảnh Ảnh có độ phân giải 1412 x 1979 thì số điểm ảnh của nó là 2.794.348 pixel, độ phân giải gần đúng là 2,8 megapixel.

Mức xám của ảnh

Mỗi điểm ảnh có hai đặc trưng cơ bản là vị trí (x,y) của nó và độ xám f(x,y)

Mức xám của điểm ảnh thể hiện sự biến đổi tương ứng giữa giá trị độ sáng của điểm ảnh và một giá trị nguyên dương Thông thường, mức xám được xác định trong phạm vi từ 0 đến 255, tùy thuộc vào giá trị biểu diễn của từng điểm ảnh Đây là yếu tố quan trọng trong xử lý ảnh số, giúp phân biệt các mức độ sáng khác nhau trong hình ảnh.

Các thang giá trị mức xám thông thường là: 16, 32, 64, 128, 256 Mức 256 là mức phổ biến nhất.

Độ sâu màu của ảnh số

Độ sâu màu của ảnh số là chỉ số quan trọng mô tả khả năng biểu diễn các màu sắc trong hình ảnh, phản ánh chất lượng màu sắc khi hiển thị trên các thiết bị màn hình hoặc in ấn Thông số này thể hiện số lượng bit được sử dụng để xác định màu sắc của mỗi pixel, giúp nâng cao độ chính xác và chi tiết của hình ảnh Độ sâu màu càng cao, khả năng hiển thị các màu sắc trung thực và phong phú càng lớn, góp phần nâng cao trải nghiệm thị giác của người xem.

Từ đó ta phân biệt 3 loại ảnh: ảnh nhị phân, ảnh xám và ảnh màu:

Ảnh nhị phân (binary image) là loại hình ảnh đen trắng, trong đó mỗi pixel chỉ có giá trị 0 hoặc 255, thể hiện bằng 1 bit Nguyên lý này giúp giảm dung lượng lưu trữ và xử lý ảnh hiệu quả, phù hợp cho các ứng dụng yêu cầu độ chính xác cao về phân vùng màu sắc.

Ảnh xám (gray image) là dạng ảnh có mô hình màu đơn sắc với 256 cấp độ xám biến thiên từ đen đến trắng, mỗi pixel có giá trị từ 0 đến 255 Hình 2.4 trình bày ví dụ về ảnh nhị phân và ảnh xám, trong đó mỗi pixel được biểu diễn bằng 8 bit để đảm bảo độ chính xác và chi tiết trong xử lý hình ảnh Ảnh xám là nền tảng quan trọng trong xử lý ảnh số, giúp phân biệt các đặc điểm hình ảnh dựa trên độ sáng của từng pixel.

Khi biểu diễn ảnh nhị phân hay ảnh xám, ta chỉ cần một ma trận m x n, mỗi phần tử của ma trận là giá trị xám của một pixel

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT Ảnh màu là ảnh thông thường ta hay nhìn thấy nhất, ở đây ta sẽ xét ảnh theo mô hình

RGB là hệ màu gồm ánh sáng đỏ, xanh lục và xanh lam phối hợp theo nhiều phương thức khác nhau để tạo ra đa dạng màu sắc Mỗi pixel của ảnh màu chứa 3 giá trị xám tương ứng với màu đỏ (R), màu xanh lục (G) và màu xanh lam (B), mỗi giá trị nằm trong khoảng từ 0 đến 255 Để biểu diễn một pixel, người ta sử dụng 24 bit (3 byte), trong đó mỗi byte đại diện cho một trong ba thành phần màu RGB.

Khi biểu diễn một ảnh màu, nó thường có dạng gồm các ma trận khác nhau Để thuận tiện cho việc lưu trữ và xử lý, ta tách ảnh thành ba ma trận tương ứng với các màu đỏ, xanh lam và xanh lục Việc tách này giúp tối ưu hóa quá trình xử lý hình ảnh và đảm bảo hiệu quả trong lưu trữ dữ liệu màu sắc.

Mỗi ma trận được tách ra sẽ được gọi là một channel Vì vậy ảnh màu sẽ có 3 channel: channel đỏ, channel xanh lục và channel xanh lam

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

XỬ LÝ ẢNH VỚI THƯ VIỆN OPENCV

Làm quen với thư viện OpenCV

1 Đọc, hiển thị và lưu file ảnh Để tiến hành thực hiện được các bộ lọc, thuật toán trong xử lý ảnh thì ba thao tác đọc, hiện thị và lưu file ảnh nắm vai trò quan trọng và tối thiểu

Hình ảnh sau được sử dụng để thao tác trong phần này:

Trước tiên ta sẽ đưa ra đoạn code thực hiện cả ba chức năng trên:

# import thư viện opencv import cv2

# Hàm cv2.imread() được dùng để đọc ảnh img_anh1 = cv2.imread('anh1.jpg', 1)

# Hàm namedWindow() thay đổi kích thước cửa sổ cv2.namedWindow('first image', cv2.WINDOW_NORMAL)

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

# Hàm cv2.imshow được dùng để hiển thị ảnh trên cửa sổ cv2.imshow('first image',img_anh1)

# Hàm waitKey() chỉ định thời gian của sổ hiển thị cv2.waitKey(0)

# cv2.destroyAllWindows() xóa tất cả cửa sổ đã tạo cv2.destroyAllWindows()

The cv2.imwrite() function in OpenCV is used to save images to a file, as demonstrated with the example cv2.imwrite('firstimage.jpg', img_anh1) To read an image in OpenCV, the imread() function is utilized with the syntax imread('filename', flags), allowing users to load input images effectively.

Với 2 đối số đầu vào:

Để sử dụng hình ảnh trong mã Python, bạn cần đặt tệp ảnh vào cùng thư mục với file py đang thực thi hoặc cung cấp đường dẫn đầy đủ đến tệp ảnh Đảm bảo rằng ảnh đã được lưu đúng vị trí để tránh lỗi khi truy xuất trong quá trình chạy mã Việc đặt ảnh đúng thư mục giúp quản lý dễ dàng và giảm thiểu các lỗi liên quan đến đường dẫn.

Trong OpenCV, đối số flags cho phép bạn chỉ định cách hình ảnh sẽ được hiển thị sau khi tải Có ba tùy chọn phổ biến: cv2.imread_unchanged hoặc -1 để tải hình ảnh gồm cả kênh alpha (chế độ trong suốt), cv2.imread_grayscale hoặc 0 để tải hình ảnh ở chế độ xám, và cv2.imread_color hoặc 1 để tải hình ảnh màu và bỏ qua kênh trong suốt Trong đó, giá trị này là giá trị mặc định khi không chỉ định.

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Ta có thể truyền tên đầy đủ hoặc số thay thế cho đối số, tùy mục đích khác nhau mà ta sẽ sử dụng giá trị khác nhau

Hình 3.2 Của sổ ảnh kết quả

Lưu ý rằng thư viện OpenCV đọc hình ảnh màu ở định dạng BGR, trong khi đa số các thư viện thị giác máy tính khác sử dụng định dạng kênh RGB Do đó, khi làm việc với OpenCV, người dùng cần chú ý chuyển đổi màu sắc để đảm bảo tính nhất quán và chính xác cho các tác vụ xử lý hình ảnh Việc này giúp tránh nhầm lẫn về màu sắc và đảm bảo kết quả phân tích đúng như mong đợi.

OpenCV với các bộ công cụ khác cần có chuyển đổi kênh màu để đảm bảo ảnh không bị sai lệch màu

Ta sử dụng àm imshow() để hiển thị ảnh trong cửa sổ với cú pháp: imshow( ‘window_name’, image)

- window_name: tên cửa sổ sẽ được hiển thị

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

- image: ảnh cần hiển thị

Có thể hiển thị nhiều ảnh một lúc, ta cần định tên rõ cho từng cửa sổ hiển thị của từng ảnh tương ứng

Để giữ hình ảnh hiển thị trên màn hình sau khi sử dụng hàm imshow() trong OpenCV, bạn cần sử dụng thêm hàm waitKey() để tạm dừng chương trình và cho phép người dùng quan sát hình ảnh Sau khi nhấn phím để kết thúc, hàm destroyAllWindows() hoặc destroyWindow() sẽ đóng tất cả các cửa sổ hiển thị nhằm đảm bảo quá trình hiển thị kết thúc một cách chính xác Các bước này giúp quản lý khả năng hiển thị trực quan của hình ảnh trên màn hình trong quá trình xử lý ảnh bằng OpenCV.

Hàm waitKey() là một hàm liên kết bàn phím:

- Hàm chỉ có một đối số duy nhất, đó là thời gian cửa sổ sẽ hiển thị (tính bằng mili giây)

- Nếu người dùng nhấn bất kỳ phím nào trong khoảng thời gian này, chương trình sẽ tiếp tục

- Nếu truyền vào giá trị 0, chương trình sẽ chờ vô hạn tới khi một phím bất kỳ được nhấn

The destroyAllWindows() function is used to close all created windows at once If only a specific window needs to be closed, its window name should be passed as an argument to the function This ensures precise control over window management in your application.

Additionally, you can modify the display window size using the function namedWindow('windowname', flags) The flags parameter can be set to WINDOW_AUTOSIZE, which is the default setting, or WINDOW_NORMAL, allowing users to resize the window by dragging.

Ta sử dụng hàm imwrite() với cú pháp: imwrite( ‘filename’, image )

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

- filename: tên tệp để lưu lại, phải bao gồm cả phần mở rộng (.png, jpg,…)

- image: ảnh bạn muốn lưu

Hàm trả về giá trị True nếu ảnh được lưu thành công

2 Cắt, xoay và thay đổi kích thước ảnh

Trước tiên ta sử dụng đoạn code sau để xem kích thước của ảnh đầu vào: rows, cols, _ = img_anh1.shape print("Rows", rows) print("Cols", cols)

Sau khi đã có được những thông số về kích thước, ta tiến hành cắt ảnh theo cú pháp chọn vùng cắt như sau: img[ x1:x2, y1:y2 ] trong đó:

 [x1: x2, y1 : y2] : vùng cần cắt; x1, x2, y1, y2 là các số nguyên

Coi ảnh là một ma trận gồm x hàng, y cột:

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Hình sau mô tả chọn vùng bị cắt:

Hình 3.3 Mô tả ảnh cắt

Dựa trên kích thước đã xem trước đó mà ta chọn các giá trị x, y theo vùng cần cắt cho phù hợp

Ví dụ: Sau khi thực hiện đoạn code sau:

# import thư viện opencv import cv2

# Hàm cv2.imread() được dùng để đọc ảnh img_anh1 = cv2.imread('anh1.jpg', 1)

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT roi = img_anh1[500:700, 400:560] cv2.imshow('Region Of Interest', roi)

# Hàm waitKey() chỉ định thời gian của sổ hiển thị cv2.waitKey(0)

# cv2.destroyAllWindows() xóa tất cả cửa sổ đã tạo cv2.destroyAllWindows()

Để xoay ảnh sau khi cắt, bạn cần xác định rõ gốc và hướng xoay Sau khi đã xác định được các yếu tố này, bước tiếp theo là tính toán ma trận xoay phù hợp Cuối cùng, nhân ma trận xoay với ma trận ảnh gốc sẽ giúp bạn tạo ra ảnh sau khi xoay một cách chính xác và hiệu quả.

OpenCV cung cấp hàm getRotationMatrix2D() để xác định ma trận xoay, với cú pháp: getRotationMatrix2D(center, angle, scale) với 3 đối số:

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

 angle: góc quay (theo độ), nếu là số dương thì hình ảnh sẽ quay theo hướng nguowjwc chiều kim đồng hồ và ngược lại

Hệ số tỷ lệ đẳng hướng (scale) cho phép điều chỉnh kích thước hình ảnh lên hoặc xuống dựa trên giá trị khai báo, có thể là số thập phân Ví dụ, giá trị 1.0 giữ nguyên kích thước ảnh gốc, trong khi giá trị 2.0 sẽ làm ảnh đầu ra gấp đôi kích thước của ảnh gốc Việc sử dụng hệ số tỷ lệ này giúp kiểm soát chính xác tỷ lệ hình ảnh trong quá trình xử lý và tối ưu hóa hình ảnh cho các mục đích khác nhau.

Bước cuối cùng trong quá trình tạo ảnh xoay là nhân hai ma trận để thực hiện phép biến đổi affine Thư viện OpenCV cung cấp hàm warpAffine() nhằm hỗ trợ thực hiện phép biến đổi này một cách dễ dàng và chính xác Cú pháp của hàm warpAffine() gồm các tham số chính như src, M, dsize, cùng các tùy chọn như dst, flags, borderMode và borderValue Hàm warpAffine() giúp biến đổi hình ảnh theo ma trận affine một cách hiệu quả, đảm bảo chất lượng và độ chính xác cao trong xử lý ảnh.

 Dsize: kích thước của hình ảnh đầu ra

 Dst: hình ảnh đầu ra

 Flags: cờ kết hợp các phương pháp nội suy như INTER_LINEAR hoặc

 BorderMode: phương pháp ngoại suy pixel

 BorderValue: giá trị được sử dụng trong trường hợp đường viền không đổi, có giá trị mặc định là 0

Ví dụ chạy đoạn code sau :

# import thư viện opencv import cv2

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

# Hàm cv2.imread() được dùng để đọc ảnh img_anh1 = cv2.imread('anh1.jpg', 1)

# Xác định gốc xoay center = (w // 2, h // 2)

# Xác định ma trận xoay

# Xoay ảnh rotated = cv2.warpAffine(img_anh1, M , (w, h))

# Hàm cv2.imshow được dùng để hiển thị ảnh trên cửa sổ cv2.imshow('rotated image',rotated)

# Hàm waitKey() chỉ định thời gian của sổ hiển thị cv2.waitKey(0)

# cv2.destroyAllWindows() xóa tất cả cửa sổ đã tạo cv2.destroyAllWindows()

Thu được ảnh giữ nguyên kích thước ảnh gốc, quay ngược chiều kim đồng hồ 45 độ :

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Hình 3.5 Ảnh sau khi xoay Thay đổi kích thước ảnh Để thay đổi kích thước ảnh, OpenCV cung cấp hàm resize() với cú pháp: resize( src, dsize) trong đó:

Kích thước mới của ảnh đầu ra (dsize: new_width, new_height) giúp giữ nguyên tỷ lệ của ảnh gốc khi thay đổi kích thước Đoạn mã dưới đây giúp bạn điều chỉnh kích thước ảnh dựa trên một chiều cố định, ví dụ như khi ảnh ban đầu có kích thước 1280 x 913 và bạn muốn thay đổi chiều rộng thành 700 pixel mà vẫn giữ nguyên tỷ lệ ban đầu Điều này đảm bảo ảnh được thay đổi kích thước một cách chính xác mà không làm biến dạng hình ảnh.

# import thư viện opencv import cv2

# Hàm namedWindow() thay đổi kích thước cửa sổ cv2.namedWindow('resized image', cv2.WINDOW_NORMAL)

# Hàm cv2.imread() được dùng để đọc ảnh

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT img_anh1 = cv2.imread('anh1.jpg', 1)

# Lấy kích thước ảnh gốc

(h, w, d) = img_anh1.shape r = 700.0 / w img_resize = cv2.resize(img_anh1, ( 700, int(h * r)))

# Hàm cv2.imshow được dùng để hiển thị ảnh trên cửa sổ cv2.imshow('resized image',img_resize)

# Lấy kích thước ảnh mới rows, cols, _ = img_resize.shape print("Rows", rows) print("Cols", cols)

# Hàm waitKey() chỉ định thời gian của sổ hiển thị cv2.waitKey(0)

# cv2.destroyAllWindows() xóa tất cả cửa sổ đã tạo cv2.destroyAllWindows()

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Hình 3.6 Ảnh thay đổi kích thước

Cải thiện và nâng cấp ảnh

1 Toán tử trên điểm ảnh

1.1 Một số phép biến đổi cấp xám cơ bản

Phép đảo ảnh là kỹ thuật xử lý hình ảnh nhằm đảo ngược các giá trị xám trong ảnh, với công thức s = (L - 1) – r, trong đó s là điểm ảnh sau xử lý, r là điểm ảnh ban đầu và L là mức xám tối đa Thao tác này giúp tạo ra hiệu ứng đảo ngược màu sắc trên ảnh, thường được áp dụng trong các ứng dụng xử lý ảnh để tăng tính sáng tạo hoặc cải thiện độ tương phản Dưới đây là đoạn mã sử dụng thư viện OpenCV để thực hiện phép đảo ảnh, giúp bạn dễ dàng áp dụng trong các dự án xử lý hình ảnh của mình.

# import thư viện opencv import cv2

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

# Hàm namedWindow() thay đổi kích thước cửa sổ cv2.namedWindow('resized image', cv2.WINDOW_NORMAL)

# Hàm cv2.imread() được dùng để đọc ảnh img_anh1 = cv2.imread('anh1.jpg', 1)

# Hiển thị ảnh gốc cv2.imshow('original imnage', img_anh1)

# Đảo ảnh img_anh2 = 255 - img_anh1

# Hiển thị ảnh âm bản cv2.imshow('Image Negatives', img_anh2)

# Hàm waitKey() chỉ định thời gian của sổ hiển thị cv2.waitKey(0)

# cv2.destroyAllWindows() xóa tất cả cửa sổ đã tạo cv2.destroyAllWindows()

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Hình 3.7 Đảo ảnh Ảnh sau khi đảo còn được gọi là ảnh âm bản

Sử dụng thuật toán trên với ảnh xám, ta thu được kết quả như sau:

Ảnh âm bản được ứng dụng rộng rãi trong nhiều lĩnh vực, mang lại lợi ích trong việc chỉnh sửa và cải thiện các chi tiết màu trắng hoặc xám nằm trong vùng tối của hình ảnh Công nghệ này giúp nâng cao chất lượng hình ảnh, đặc biệt trong các lĩnh vực yêu cầu độ chính xác cao như y học, nhiếp ảnh và thiết kế đồ họa Việc sử dụng ảnh âm bản không chỉ tối ưu hóa quá trình chỉnh sửa mà còn giúp tái tạo các chi tiết quan trọng bị mất đi trong quá trình chỉnh sửa ảnh.

Logarithmic transformation is an image processing technique that adjusts pixel values using the formula s = c * log(1 + r), where r is the original pixel intensity, c is a constant, and s is the processed pixel The Python code utilizes OpenCV and Matplotlib to perform this transformation: a function applies the logarithmic function to the image with a specified constant, and a visualization function displays both the original and transformed images side by side for comparison.

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT if name == ' main ': show_Chuyen_doi_logarit()

Hình 3.9 Ảnh biến đổ Logarit

Biến đổi ảnh bằng hàm Logarit là phương pháp xử lý điểm ảnh theo dạng s = c * r^γ, trong đó r là giá trị điểm ảnh đầu vào, c và γ là các hằng số, còn s là điểm ảnh sau biến đổi Phương pháp này giúp nâng cao khả năng xử lý ảnh, đặc biệt trong việc cải thiện độ tương phản Hàm Chuyen_Doi_Gamma trong Python sử dụng thư viện OpenCV và Matplotlib để thực hiện biến đổi gamma cho ảnh, với công thức s = c * r^γ, giúp điều chỉnh độ sáng và độ tối của ảnh một cách linh hoạt Việc ứng dụng biến đổi gamma trong xử lý ảnh góp phần nâng cao chất lượng hình ảnh, phù hợp cho các bài toán xử lý ảnh chuyên sâu.

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT def show_Chuyen_Doi_Gamma(): fig = plt.figure(figsize=(16, 9))

This article demonstrates how to perform gamma correction on an image using Python and OpenCV It loads a grayscale image ('anh1.jpg') and displays it alongside three gamma-adjusted versions with gamma values of 0.6, 0.3, and 0.1, showcasing the effect of different gamma settings on image brightness The implementation uses a custom function (Chuyen_Doi_Gamma) to apply gamma transformation, and results are visualized in a 2x2 subplot layout for clear comparison This approach provides an effective way to enhance image contrast and brightness through gamma correction, crucial for improving visual quality in computer vision tasks.

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Hình 3.10 Ảnh biến đổi gamma 1.2 Cắt ngưỡng

Cắt ngưỡng là việc đưa ảnh đa cấp xám về hai mức giá trị xám

Chúng ta sẽ chọn một giá trị ngưỡng cụ thể T để thực hiện quá trình cắt ngưỡng Trong đó, các giá trị xám tại mỗi pixel sẽ được so sánh với ngưỡng T; nếu giá trị xám nhỏ hơn T, nó sẽ được chuyển thành 0, còn nếu lớn hơn hoặc bằng T, nó sẽ được gán giá trị (L - 1) Phương pháp này giúp phân đoạn hình ảnh dựa trên mức độ sáng tối của các pixel, nâng cao khả năng xử lý và phân tích hình ảnh trong các ứng dụng xử lý ảnh.

Ta có thể quan sát đồ thị sau:

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Trong đó: r là các pixel của ảnh ban đầu

S là các pixel của ảnh sau khi cắt ngưỡng

HÌnh 3.11 Đồ thị cắt ngưỡng

Ta định nghĩa hàm sau: def cat_nguong(img, th): return img > th img là ảnh đầu vào và th là giá trị ngưỡng

Hàm trả về giá trị true (1) nếu giá trị xám điểm ảnh lớn hơn th, trả về giá trị false (0) nếu nhỏ hơn th

Với th = 117 ta thu được kết quả như sau:

Hình 3.12 Hình cắt ngưỡng 1.3 Trích chọn bit

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Trong ảnh 8 bit, mỗi điểm ảnh được biểu diễn bằng 8 mặt phẳng bit, xếp chồng theo thứ tự từ cao đến thấp, với mặt phẳng bit số 8 nằm trên cùng và bit số 1 ở dưới cùng Các mặt phẳng phía trên chứa dữ liệu ý nghĩa của ảnh, trong khi các mặt phẳng phía dưới chủ yếu chứa dữ liệu chi tiết của hình ảnh.

Kỹ thuật lát cắt mặt phẳng bit là phương pháp sử dụng các phép toán trên điểm ảnh để chuyển đổi ảnh đa cấp xám thành nhiều ảnh nhị phân Phương pháp này giúp xác định các mặt phẳng bit quan trọng và xác định số lượng bit cần thiết trong quá trình lượng tử hóa Nhờ đó, kỹ thuật lát cắt mặt phẳng bit tối ưu hóa quá trình xử lý ảnh, nâng cao hiệu quả mã hóa và giảm thiểu mất mát thông tin.

Ta có thể mô tả các bước của kỹ thuật này với ví dụ về ảnh 3 bit như sau:

Bước 1: Chuyển ảnh n bit sang ma trận mà mỗi phần tử của ma trận là một chuỗi n bit

Bước 2: Tách ma trận trên thành n ma trận (n mặt phẳng bit), mỗi phần tử chứa 1 bit

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Bước 3: Tái tạo lại ảnh, chuyển các ảnh nhị phân thành ảnh đa cấp xám tương ứng theo công thức: s = r 2 𝑚−1

Trong đó, r là phần tử của ảnh nhị phân, s là phần tử của ảnh đa cấp xám tương ứng, m là thứ tự của ảnh nhị phân đó ( m = 1,2, ,n)

Sau khi nhập và đọc ảnh ở chế độ xám bằng thư viện OpenCV, chúng ta tiến hành xử lý ảnh từng bước để phân tích và xử lý dữ liệu hình ảnh một cách hiệu quả Việc kết hợp với các thư viện khác như NumPy giúp tối ưu hóa quá trình xử lý, từ đó thực hành các kỹ thuật như lọc, chỉnh sửa và phân đoạn ảnh một cách chính xác hơn.

Ở bước đầu tiên, ảnh thường được xử lý ở định dạng 8 bit, trong đó mỗi pixel có giá trị xám gồm 8 bits Quá trình chuyển đổi bắt đầu bằng việc lấy danh sách các giá trị xám tại từng pixel, sau đó chuyển đổi mỗi giá trị này sang hệ nhị phân với độ dài 8 bit để đảm bảo tính nhất quán và dễ dàng cho các bước xử lý tiếp theo.

#Khởi tạo danh sách lst = [] for i in range(img.shape[0]): for j in range(img.shape[1]): lst.append(np.binary_repr(img[i][j],width=8)) # width: số bit

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Sau khi có danh sách chứa chuỗi các bit, bước tiếp theo là lặp qua từng phân tử bit để tạo ra các mặt phẳng bit Quá trình này giúp rút chích và tổ chức dữ liệu hợp lý, sau đó lưu vào từng danh sách riêng biệt, đảm bảo quá trình xử lý dữ liệu diễn ra thuận lợi và hiệu quả.

Ví dụ rút chích mặt phẳng bit thứ 8:

#Khởi tạo danh sách mặt phẳng bit mp_bit_8 =[] for i in lst: mp_bit_8.append(int(i[0]))

Tương tự, để lấy phần tử của mặt phẳng thứ 7 ta sẽ truy cập vào phần tử i[1], mặt phẳng thứ 6 là i[2],…

Bước 3: Tái tạo lại ảnh từ các ảnh nhị phân

# Nhân từng phần tử với 2^(n-1) để có ảnh tái tạo tương ứng với mỗi mặt phẳng bit

# n là bit thứ n image_bit_8 =

(np.array(mp_bit_8,dtype='uint8')*128).reshape(img.shape[0],img.shape[1])

Tương tự với các mặt phẳng còn lại

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Hình 3.13 Các mặt phẳng bit

Ta cũng có thể tái tạo ảnh bằng việc kết hợp một vài mặt phẳng bit lại với nhau

Ví dụ kết hợp mặt phẳng bit thứ 8 và thứ 7 :

#Vẽ ảnh bit thứ 8 và bít thứ 7 bx2.imshow(image_bit_8 + image_bit_7, cmap='gray') bx2.set_title("Mặt phẳng bit 8 và bit 7")

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Hình 3.14 Kết hợp 2 mặt phẳng bit 1.4 Histogram

Histogram của ảnh hay còn gọi là lược đồ xám cho thấy phân bố mức xám trên ảnh

Gọi 𝑟 𝑘 là giá trị mức xám của pixel thứ k của ảnh có L mức xám, với k = 0,1,2,…,L-1 Đặt h(𝑟 𝑘 ) = 𝑛 𝑘 là tổng số pixel có cùng giá trị mức xám 𝑟 𝑘

Khi đó h(𝑟 𝑘 ) được gọi là Histogram không chuẩn hóa Đặt p(𝑟 𝑘 ) = h(𝑟 𝑘 ) / (M*N) :

 p(𝑟 𝑘 ) được gọi là Histogram chuẩn hóa hay gọi tắt là Histogram của ảnh

 M x N là tổng số pixel có trong ảnh

Ví dụ ta có ma trận ảnh 8 x 8 sau:

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Ví dụ Histogram của ảnh:

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

 Ảnh tối: Histogram sẽ phân bố về phía trái (về phía có mức xám bằng 0)

 Ảnh sáng: Histogram sẽ phân bố về phía phải (về phía có mức xám bằng 255)

 Ảnh có độ tương phản thấp: Histogram phân bố không đều

 Ảnh có độ tương phản cao: Histogram phân bố đều

Từ đó ta có ứng dụng cân bằng Histogram của ảnh để tăng cường ảnh

Các bước của kỹ thuật cân bằng Histogram:

Bước 1: Tính xác suất giá trị mức xám 𝑟 𝑘 có trong ảnh p(𝑟 𝑘 ) = h(𝑟 𝑘 ) / (M*N), trong đó:

 h(𝑟 𝑘 ) = 𝑛 𝑘 là tổng số pixel có cùng giá trị mức xám 𝑟 𝑘

 M x N là tổng số pixel có trong ảnh

Bước 2: Tính hàm mật độ xác suất:

 Ảnh thu được từ 𝑠 𝑘 gọi là ảnh cân bằng Histogram

 Giá trị làm tròn 𝑠 𝑘 gọi là mức xám của pixel thứ k trong ảnh cân bằng

Ví dụ: Cân bằng Histogram của một ảnh 3 bit, với mức xám L = 8, ảnh có kích thước

64 x 64 pixel, với giá trị mức xám như trong bảng sau:

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Từ đó ta có ảnh đã được cân bằng Histogram:

Trong thư viện OpenCV, hàm equalizeHist(src) giúp cân bằng histogram của ảnh một cách đơn giản và nhanh chóng Hàm này nhận vào tham số src là ảnh gốc cần thực hiện cân bằng histogram, giúp cải thiện độ tương phản của hình ảnh một cách hiệu quả Sử dụng hàm này dễ dàng, phù hợp cho các ứng dụng xử lý ảnh yêu cầu nâng cao chất lượng hình ảnh.

Ta cũng có thể vẽ được biểu đồ Histogram thông qua thư viện matplotlib với câu lệnh: hist(src) Kết quả thu được như sau:

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

2 Toán tử trên miền không gian

Kỹ thuật lọc mịn ảnh sử dụng mặt nạ lọc (kernel, filter hoặc mask), là dạng ma trận vuông có kích thước từ 3x3 đến 4x4 hoặc hơn Mặt nạ lọc này di chuyển trên ảnh, thao tác với các điểm lân cận của mỗi điểm ảnh để thực hiện các quá trình như trung bình, trung vị, max, min hoặc gaussian Phương pháp này giúp làm mịn và giảm nhiễu trong ảnh một cách hiệu quả.

Ta có thể mô tả hoạt động thông qua hình sau:

Hình 3.18 Mô tả quá trình lọc ảnh

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Ma trận lọc 3x3 hình xám (hình trái) hoạt động bằng cách chập lên lân cận của điểm ảnh, trượt qua để tạo ra các phần tử của ma trận mới Quá trình này giúp xử lý ảnh hiệu quả, nâng cao chất lượng và tăng cường các đặc điểm quan trọng trên ảnh xám Sử dụng công thức lọc ma trận 3x3 là kỹ thuật phổ biến trong xử lý ảnh để làm nổi bật các chi tiết cần thiết và giảm nhiễu.

Tổng quát công thức lọc biểu diễn như sau:

 a = (m - 1)/2 và b = (n - 1)/2, m x n là kích thước bộ lọc

 * là phép toán tích chập

Chú ý: Phần tử trung tâm của bộ lọc sẽ có tọa độ (0, 0)

Ví dụ: Ta có ảnh f(x,y), và điểm ảnh e, lọc với một ma trận lọc kích thước 3 x3 : Ảnh f(x,y) Ma trận lọc r s t u v w x y z

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Ta sẽ lấy lân cận 3 x 3 của e chập với ma trận lọc và tính tổng các giá trị lại ta thu được phần tử mới 𝑒 𝑝𝑟𝑜𝑐𝑒𝑠𝑠𝑒𝑑 : a b c d e f g h i * r s t u v w x y z

𝑒 𝑝𝑟𝑜𝑐𝑒𝑠𝑠𝑒𝑑 = a.r + b.s + c.t + d.u + e.v + f.w + g.x + h.u + i.z Quá trình nhân chập như vậy lặp lại với từng điểm ảnh trong ảnh gốc đế tạo ra ảnh lọc

Tuy nhiên trong quá trình lặp, sẽ gặp phải trường hợp thiếu các pixel để tạo nên lân cận, ví dụ như các pixel ở biên:

Một số giải pháp được đưa ra như sau:

 Bỏ qua các pixel thiếu

 Mở rộng ảnh bằng cách thêm vào những pixel đen hoặc trắng

 Nhân đôi các pixel ở biên

Sau đây ta sẽ đi vào tìm hiểu các bộ lọc mịn cụ thể

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Bộ lọc này hoạt động bằng cách tính trung bình các pixel lân cận của pixel trung tâm, giúp loại bỏ nhiễu và làm nổi bật các chi tiết lớn trong hình ảnh Técn hành này là một trong những phương pháp hiệu quả để cải thiện chất lượng hình ảnh, đặc biệt trong xử lý ảnh số Áp dụng bộ lọc trung bình giúp làm mềm các cạnh sắc nét, giảm nhiễu và tăng cường độ rõ nét của các đặc điểm quan trọng trong ảnh.

Ma trận lọc của bộ lọc này sẽ có dạng: 1

𝑛 𝑥 𝑛 x A Trong đó: A là ma trận có các phần tử bằng 1

Ví dụ: Ma trận lọc trung bình có kích thước 3 x 3:

1 9 Thư viện OpenCV cung cấp cho ta hàm blur() để thực hiện việc lọc trung bình với thao tác: blur( src, (m, n) )

Trong đó, src: ảnh cần lọc, (m, n) là kích thước của bộ lọc

Kết quả ảnh sau lọc:

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Giá trị trung vị X của một tập hợp là giá trị phân tách tập thành 2 nửa một nửa lớn hơn và nửa bé hơn số trung vị

Khôi phục ảnh

Khôi phục ảnh là kỹ thuật nhằm phục hồi hình ảnh bị suy thoái hoặc méo mó về nội dung và chất lượng ban đầu Quá trình này giúp tăng độ rõ nét và chi tiết của ảnh gốc, đảm bảo nội dung được giữ nguyên Đặc biệt, cần phân biệt rõ giữa khôi phục ảnh và tăng cường chất lượng ảnh để đạt hiệu quả tối ưu trong xử lý hình ảnh.

Khôi phục ảnh dựa trên mô hình suy thoái giúp phục hồi hình ảnh đã bị giảm chất lượng một cách chính xác, dựa trên các mô hình đã biết hoặc có thể ước lượng được Mục tiêu của quá trình này là đưa hình ảnh trở về trạng thái ban đầu, trong khi tăng cường ảnh nhằm tạo ra các chỉnh sửa phù hợp cho từng công việc cụ thể.

Mô hình suy thoái ảnh:

Hình 3.31 Mô hình suy thoái

 𝜂(𝑥, 𝑦) là nhiễu, g(x, y) là ảnh nhiễm nhiễu

 𝑤(𝑥, 𝑦) là bộ lọc khôi phục ảnh

 𝑓̂(x, y) là ảnh đã khôi phục Ảnh thu được sẽ được đánh giá chất lượng thông qua đại lượng mean square error

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Có 2 cách tiếp cận phổ biến để khôi phục ảnh đó là dựa vào các mô hình nhiễu hoặc dựa trên độ mờ của ảnh Với cách dựa vào các mô hình nhiễu, ảnh sẽ được khôi phục dựa trên các bộ lọc nhiễu tương ứng Còn với cách dựa trên độ mờ ảnh, một ước lượng suy thoái sẽ được thực hiện trước khi áp dụng một bộ lọc ngược để khôi phục ảnh

Trong chương này sẽ tập tìm hiểu khôi phục ảnh dựa vào các mô hình nhiễu

1.1 Khái niệm Ảnh thường bị biến dạng do nhiễu ngẫu nhiên Nhiễu xuất hiện trong quá trình thu nhận ảnh, số hóa ảnh hoặc truyền tin Do các yếu tố môi trường ví dụ như điều kiện ánh sáng yếu, nhiệt độ của thiết bị cảm biến, Ảnh nhiễu được biểu diễn bằng biểu thức:

 𝑔(𝑥, 𝑦) là ảnh sau khi bị nhiễu tác động

Nếu xác định được mô hình nhiễu, ta có thể tách nhiễu để khôi phục ảnh

1.2 Một số mô hình nhiễu

Nhiễu Gaussian xuất hiện có thể do nhiễu mạch tử, thiết bị cảm biến, ánh sáng kém hoặc nhiệt độ cảm biến cao

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Phân bố xác suất của nhiễu được tính bằng hàm Gaussian:

 ɀ là giá trị mức xám (cường độ sáng) điểm ảnh

 𝜇 là giá trị trung bình của ɀ

 𝜎 là độ lệch chuẩn của ɀ

 𝜎 2 là phương sai của ɀ Đồ thị hàm nhiễu gauss có dạng:

Hình 3.32 Đồ thị hàm nhiễu Gauss

Trong quá trình xử lý ảnh, ta sử dụng thư viện numpy để tạo nhiễu theo hàm có sẵn, đặc biệt là nhiễu Gaussian Hàm numpy có tên là normal giúp sinh nhiễu Gaussian với tham số định dạng như sau: loc (giá trị trung bình), scale (phương sai), và size (kích thước ảnh) Việc kết hợp numpy và hàm normal cho phép tạo ra các nhiễu đa dạng, phù hợp với các yêu cầu xử lý hình ảnh khác nhau.

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT gia_tri_TB = 10 phuong_sai = 25 noise = np.random.normal(loc=gia_tri_TB,scale=phuong_sai,size=(m,n))

Gau_noisy_img = img + noise

Ta có kết quả như sau:

Hình 3.33 Ảnh và histogram ảnh nhiễu Gauss Nhiễu xung(Impulse noise)

Nhiễu xung đặc trưng bởi điểm ảnh có giá trị mức xám khác biệt lớn so với các điểm lân cận, gây ra hiện tượng nhiễu rõ rệt trên hình ảnh Xung nhiễu có thể là âm hoặc dương, trong đó xung nhiễu âm thể hiện điểm ảnh đen (nhiễu hạt tiêu), còn xung nhiễu dương biểu thị điểm ảnh trắng Hiểu rõ về nhiễu xung giúp cải thiện kỹ thuật xử lý hình ảnh và nâng cao chất lượng ảnh kỹ thuật số.

(nhiễu muối) Khi ảnh bị bão hòa bởi nhiễu xung thì xuất hiện các điểm đen trắng

Mật độ phân bố xác suất của nhiễu:

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

 ɀ là giá trị mức xám điểm ảnh

 𝑘 là số bit dùng biểu diễn giá trị mức xám

 𝑉 là số nguyên trong vùng biểu diễn mức xám của ảnh (0, 2 𝑘 − 1 )

Hình 3.34 Ảnh và histogram ảnh nhiễu muối tiêu

Sau khi xác định được mô hình nhiễu, việc quan sát Histogram giúp nhận biết đặc điểm của nhiễu nhằm chọn lọc phù hợp Việc chọn bộ lọc thích hợp dựa trên phân tích này là bước quan trọng để tiến hành khôi phục ảnh tốt nhất, giảm nhiễu và nâng cao chất lượng hình ảnh Áp dụng các kỹ thuật xử lý nhiễu phù hợp sẽ đảm bảo khả năng phục hồi hình ảnh rõ nét và chính xác hơn.

2.1 Biến thể của bộ lọc trung bình

Trung bình hình học Ảnh khôi phục tại điểm (x, y) được tính theo công thức:

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

1 𝑚𝑛 trong đó: 𝑆 𝑥𝑦 là tập các tọa độ trong cửa sổ lọc hình vuông có kích thước m x n, tâm là điểm (x, y)

Lọc trung bình hình học có tác dụng lọc nhiễu nhưng vẫn giữ được nhiều chi tiết của ảnh hơn

Hình 3.35 Lọc trung bình hình học Trung bình harmonic

Bộ lọc này làm việc tốt với nhiễu muối và nhiễu Gaussian tuy nhiên không tốt với nhiễu hạt tiêu

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Hình 3.36 Lọc trung bình Harmonic 2.2 Lọc thứ tự thống kê

Trung vị: Ảnh khôi phục được tính theo công thức:

Hiệu quả cho lọc nhiễu muối và hạt tiêu

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Hiệu quả cho lọc nhiễu hạt tiêu

Hiệu quả cho việc lọc nhiễu muối

Hình 3.39 Lọc TKTT min Trung bình cắt alpha:

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

𝑑 = 𝑘𝑠𝑖𝑧𝑒 2 𝛼; ksize là kích thước bộ lọc, 𝛼 là hằng số (0 < 𝛼 < 0.5)

𝑔 𝑟 (𝑠, 𝑡) biểu diễn phần còn lại có (mn - d) pixel sau khi bị cắt bớt d/2 pixel có mức xám lớn nhất và d/2 pixel có mức xám nhỏ nhất

Bộ lọc này loại bỏ nhiễu hỗn hợp, ví dụ như nhiễu kết hợp muối tiêu và nhiễu

Hình 3.40 Lọc trung bình cắt alpha

Phân vùng ảnh là quá trình chia hình ảnh thành các vùng con dựa trên các thuộc tính chung của các điểm ảnh, giúp máy tính hiểu rõ hơn về nội dung của ảnh Mục đích của phân vùng ảnh là xác định các đặc tính của từng khu vực trong ảnh để phục vụ các công việc như dò tìm đối tượng hoặc phân lớp ảnh Quá trình này dựa trên sự thay đổi đột ngột về mức xám để phát hiện biên hoặc sử dụng các tiêu chí đã xác định trước nhằm đảm bảo phân vùng chính xác và hiệu quả.

Phân loại ảnh dựa trên sự thay đổi đột ngột về cường độ mức xám là phương pháp sử dụng các bộ lọc đạo hàm bậc 1 và bậc 2, đã được trình bày trong phần Lọc sắc nét ảnh Các kỹ thuật này giúp xác định các điểm biên và đặc trưng trong hình ảnh, nâng cao hiệu quả phân loại dựa trên đặc điểm cường độ mức xám Áp dụng các bộ lọc đạo hàm là bước quan trọng trong xử lý ảnh nhằm phát hiện các thay đổi đột ngột về cường độ, góp phần tối ưu hóa quá trình nhận diện và phân loại ảnh chính xác hơn.

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Phân loại ảnh dựa trên các tiêu chí xác định trước được chia thành 4 nhóm chính: kỹ thuật cắt ngưỡng, thuộc tính vùng ảnh, kỹ thuật phân cụm và kỹ thuật học máy Trong bài viết này, chúng ta sẽ tập trung tìm hiểu hai kỹ thuật nổi bật là cắt ngưỡng và thuộc tính vùng ảnh để hiểu rõ hơn về cách phân loại ảnh dựa trên các phương pháp này.

1 Phân vùng ảnh dựa trên kỹ thuật cắt ngưỡng toàn cục

Cắt ngưỡng là kỹ thuật xử lý ảnh nhằm chuyển đổi giá trị mức xám của bức ảnh về một giá trị xám nhất định để tối ưu hóa phân tích hình ảnh Ví dụ phổ biến là cắt ngưỡng nhị phân, trong đó ảnh được chuyển đổi thành hai mức giá trị, là 0 hoặc 1, giúp đơn giản hóa các bước xử lý hình ảnh sau này Kỹ thuật này đóng vai trò quan trọng trong các ứng dụng xử lý hình ảnh như nhận diện đối tượng, phân đoạn ảnh và xử lý nâng cao Việc cắt ngưỡng giúp cải thiện độ chính xác và hiệu quả của các thuật toán xử lý ảnh, đồng thời tối ưu hóa hiệu suất của hệ thống trong phân tích dữ liệu hình ảnh.

Cắt ngưỡng toàn cục (đơn ngưỡng) là cắt ngưỡng dựa vào một giá ttị ngưỡng T cho toàn bộ ảnh

0 𝑛ế𝑢 𝑓(𝑥, 𝑦) ≤ 𝑇 Phân chia ảnh thành 2 vùng có mức xám bằng 1 và bằng 0

Chất lượng kết quả thu được phụ thuộc vào việc chọn ngưỡng phù hợp; nếu ngưỡng quá cao có thể làm mất đi những chi tiết quan trọng trong hình ảnh Để tối ưu hóa quá trình này, thuật toán Otsu dựa trên histogram ảnh cung cấp phương pháp tự động tìm ngưỡng tối ưu, giúp phân đoạn ảnh chính xác hơn và đảm bảo giữ lại các đặc trưng quan trọng.

Bước 1: Thiết lập histogram của ảnh và chọn giá trị ngưỡng T ban đầu

Bước 2: Tạo ra 2 nhóm điểm ảnh:

 Nhóm A chứa các pixel có mức xám ≤ T

 Nhóm B chứa các pixel có mức xám > T

Bước 3: Tính xác suất tích lũy đến mức xám T của nhóm A là 𝑝 1 (𝑘) và xác suất tích lỹ đến mức xám L-1 của nhóm B là 𝑝 2 (𝑘):

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Bước 4: Tính giá trị trung bình xác suất trong nhóm A là 𝑚 1 (𝑘) và nhóm B là 𝑚 2 (𝑘)

Bước 5: Tính giá trị trung bình mức xám ảnh:

Bước 6: Tính giá trị phương sai giữa 2 nhóm A và B:

𝜎 2 𝐵 (𝑘) = 𝑝 1 (𝑘)[𝑚 1 (𝑘) − 𝑚 𝐺 ] 2 + 𝑝 2 (𝑘)[𝑚 2 (𝑘) − 𝑚 𝐺 ] 2 Bước 7: Giá trị ngưỡng tính được là : 𝑘 ∗ = max

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Hình 3.41 Phân đoạn ảnh dựa vào tìm ngưỡng Ostu

2 Phân vùng ảnh dựa trên thuộc tính vùng ảnh

Nở (gia tăng) vùng ảnh là quá trình nhóm các pixel hoặc vùng con thành các khu vực lớn hơn dựa trên tiêu chí xác định trước Phương pháp này bắt đầu từ một tập điểm gọi là hạt giống, sau đó mở rộng vùng ảnh bằng cách thêm các pixel lân cận có thuộc tính giống với hạt giống như giá trị mức xám hoặc màu sắc Quá trình mở rộng tiếp tục cho đến khi không thể mở rộng thêm nữa, đảm bảo các vùng ảnh được phân đoạn chính xác và phù hợp với tiêu chuẩn đề ra.

Bước 1: Xác định pixel hạt giống

Dựa trên đặc tính Q đã cho, bước tiếp theo là xác định tất cả các thành phần kết nối gồm 4 lân cận hoặc 8 lân cận với pixel hạt giống trong vùng ảnh chứa các pixel hạt giống S(x, y) Quá trình này giúp mở rộng vùng lựa chọn dựa trên các tiêu chí về đặc tính Q, đảm bảo tính chính xác và hiệu quả trong xử lý ảnh Việc tìm kiếm các pixel kết nối này là bước quan trọng trong phương pháp phân đoạn ảnh, giúp xác định rõ ràng các miền liên kết theo đặc điểm đã định trước.

Bước 3: Lặp lại B2 để hình thành các vùng ảnh 𝑓 𝑄 (𝑥, 𝑦) mà chứa các vùng ảnh hạt giống

Bước 4: Hình thành ảnh g(x, y) chứa nhiều vùng 𝑓 𝑄 (𝑥, 𝑦)

Bước 5: Mỗi pixel trong 𝑓 𝑄 (𝑥, 𝑦) cho gán label = 1, các vùng còn lại gán bằng 0 g(x, y) chứa các vùng con được gán label gọi là ảnh phân vùng

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Hình 3.42 Phân đoạn ảnh nở vùng 2.1.2 Thuật toán tách và gộp các vùng ảnh

Chia ảnh ban đầu thành các vùng ảnh rời rạc (dựa vào điều kiện Q nào đó) Sau đó gộp vùng ảnh dựa vào điều kiện Q

Vùng ảnh là R, chọn điều kiện Q để chia vùng

Bước 1: (Tách) Chia 𝑅 𝑖 thành 4 phần nhỏ hơn, mỗi vùng nhỏ hơn chia thành 4 vùng nhỏ hơn nữa, sao cho thỏa mãn điều kiện 𝑄(𝑅 𝑖 ) = 𝐹𝑎𝑙𝑠𝑒

Bước 2: (Gộp) Đến khi không chia được nữa, thì gộp các vùng lân cận 𝑅 𝑗 và 𝑅 𝑘 sao cho:

𝑄( 𝑅 𝑗 ᴗ 𝑅 𝑘 ) = 𝑇𝑟𝑢𝑒 Bước 3: Dừng cho đến khi không gộp được nữa

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT

Ngày đăng: 08/11/2022, 13:43

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w