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

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

73 11 0

Đ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

Tiêu đề PYTHON và vấn đề xử lý Ảnh đồ án I GIỚI THIỆU NGÔN NGỮ lập TRÌNH PYTHON
Người hướng dẫn Ts. Nguyễn Thị Thanh Huyền
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Toán Tin, Tin Học
Thể loại Đồ án
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 73
Dung lượng 2,44 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)

Nội dung

Với thư viện, chúng ta có thể chuyển từ không gian màu này sang không gian màu Thực hiện cả các phép toán hình thái trên ảnh… Scikit-image viện cung cấp nhiều thuật toán trong việc tạo

Hệ thống xử lý ảnh

Xử lý ảnh là một phân ngành của xử lý tín hiệu số, trong đó tín hiệu xử lý là ảnh Nghiên cứu về sự biến đổi trạng thái ban đầu của ảnh nhằm cải thiện thông tin trực quan cho người xem và tối ưu hóa để phục vụ nhận thức của máy, đồng thời nén dữ liệu ảnh và làm cho ảnh phù hợp với yêu cầu của các hệ thống thị giác máy tính Các kỹ thuật xử lý ảnh bao gồm tăng cường chất lượng, khôi phục, giảm nhiễu, nén ảnh và chuẩn bị dữ liệu cho nhận diện máy, nhằm nâng cao trải nghiệm người dùng và hiệu suất nhận diện trong các ứng dụng thị giác máy tính và truyền thông.

Phần lớn các chức năng xử lý ảnh tạo ra một hình ảnh mới đã bị can thiệp, thể hiện qua các kỹ thuật chỉnh sửa nội dung và chất lượng Các phương pháp xử lý ảnh được xem như hai ứng dụng chính: xử lý nâng cao chất lượng ảnh và phân tích ảnh Hệ thống xử lý ảnh mô tả chi tiết quy trình với các bước trong quá trình xử lý ảnh, từ tiền xử lý và hiệu chỉnh dữ liệu đến áp dụng thuật toán xử lý và cuối cùng là đánh giá chất lượng kết quả.

Trong hệ thống xử lý ảnh, bước đầu tiên là thu nhận, chụp và số hóa ảnh Ảnh được thu nhận qua các thiết bị như camera, cảm biến (sensor) và scanner, sau đó tín hiệu được số hóa thành dữ liệu ảnh số Các tham số quan trọng của bước này bao 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 từng thiết bị, những yếu tố này ảnh hưởng trực tiếp đến chất lượng hình ảnh và hiệu suất xử lý ở các bước xử lý ảnh tiếp theo.

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 các bước cải thiện và nâng cấp ảnh, sửa lỗi và khôi phục ảnh nhằm tối ưu chất lượng hình ảnh Sau đó là phân tách đặc trưng với các hoạt động tách biên và phân vùng ảnh, giúp làm nổi bật các thành phần nổi bật và cấu trúc bên trong ảnh Quá trình biểu diễn và xử lý đặc trưng hình dạng đối tượng ảnh cho phép mô tả và xử lý các đặc trưng trực quan một cách có hệ thống Cuối cùng, nhận dạng đối tượng ảnh, phân tích cảnh và hiểu cảnh được thực hiện để nhận diện nội dung, phân tích ngữ cảnh và hiểu được cảnh quan trong ảnh.

Sau khi kết thúc các bước tiếp nhận ảnh, chụp ảnh và số hóa, chúng ta sẽ tiến tới giai đoạn tiền xử lý hình ảnh Ở bước này, chất lượng ảnh được cải thiện đáng kể về độ tương phản, giúp tăng độ sắc nét và chi tiết Đồng thời, các kỹ thuật khử nhiễu, khử bóng và khử lệch màu được áp dụng để làm sạch dữ liệu và cân bằng sáng tối Những điều chỉnh trong tiền xử lý chuẩn bị cho các bước xử lý sâu tiếp theo và tối ưu hóa kết quả phân tích.

Phân vùng ảnh (hay phân đoạn ảnh) là quá trình tách ảnh đầu vào thành các vùng thành phần có tính chất đồng nhất dựa trên các đặc trưng như biên cạnh, màu sắc, độ sáng hoặc kết cấu, đồng thời dựa trên tính liên thông giữa các điểm ảnh Mỗi vùng đại diện cho một phần của hình ảnh, có thể là một đối tượng hoặc một khu vực có đặc điểm chung, và quá trình này giúp tối ưu hóa phân tích, nhận diện và xử lý ảnh cho các ứng dụng như thị giác máy tính, nhận diện đối tượng, nén ảnh và phân loại nội dung.

Việc trích chọn đặc trưng (Feature Selection) là quá trình lựa chọn các tính chất của ảnh để thể hiện dưới dạng thông tin định lượng nhằm làm cơ sở phân biệt các lớp đối tượng trong tập ảnh Quá trình này tập trung vào việc tách và cô đọng các đặc tính mang ý nghĩa nhận diện, giúp loại bỏ các đặc trưng ít có giá trị đóng góp cho phân loại Ví dụ trong nhận dạng ký tự trên phong bì thư, các đặc trưng của từng ký tự được mô tả để 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, hay còn gọi là ảnh tự nhiên, là hình ảnh tồn tại liên tục về không gian và độ sáng Để có thể xử lý ảnh một cách hiệu quả, ta tiến hành số hóa bằng cách biến đổi ảnh liên tục thành một tập hợp các điểm (điểm ảnh hay pixel) có vị trí và mức sáng tương ứng với ảnh gốc Mỗi điểm ảnh đại diện cho một mẫu tại một vị trí cố định trên mặt phẳng ảnh Khoảng cách giữa các điểm ảnh được thiết lập sao cho mắt người nhìn bình thường không thể phân biệt ranh giới giữa chúng, tạo ra sự liên tục thị giác khi hiển thị trên màn hình hoặc khi in ấn.

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 độ

Mỗi điểm có tọa độ (x,y) là một pixel, giá trị số tại điểm (x,y) đó chính là giá trị xám ( sẽ được trình bày sau), giá trị đó là hữu hạn : 0 ≤ f(x,y) ≤ 𝑓 𝑚𝑎𝑥

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

Độ phân giải hình ảnh là lượng thông tin chứa đựng trong một tập tin ảnh hiển thị trên màn hình, hay nói cách khác đó là tổng số pixel trong một hình ảnh số Đơn vị đo độ phân giải là pixel, và khi nói đến mức cao hơn, người ta dùng thuật ngữ megapixel (MP) 1 megapixel tương đương với một triệu pixel, giúp mô tả chi tiết và kích thước của hình ảnh.

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 là kết quả biến đổi một giá trị độ sáng của một điểm ảnh thành một giá trị số nguyên dương Thông thường mức xám được xác định trong đoạn [0, 255], tùy thuộc vào giá trị mà mỗi điểm ảnh được biểu diễn.

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à đại lượng mô tả khả năng biểu diễn các màu sắc khi hiển thị trên màn hình hoặc khi in ấn Đây là thông số cho biết số lượng bit được sử dụng để biểu thị màu sắc của mỗi pixel, từ đó xác định số lượng màu sắc có thể hiển thị ở điểm ảnh đó Độ sâu màu phổ biến nhất hiện nay là 8 bit cho mỗi kênh, tương đương 24 bit cho cả ba kênh RGB, cho phép hơn 16 triệu màu; các độ sâu cao hơn như 10, 12 hoặc 16 bit cho mỗi kênh mang lại sự pha trộn màu mịn và chi tiết sắc độ tốt hơn, nhưng cũng đòi hỏi dung lượng lưu trữ và băng thông lớn hơn Việc chọn độ sâu màu phù hợp giữa in ấn và hiển thị có thể ảnh hưởng tới chất lượng hình ảnh, dung lượng tập tin và hiệu suất truyền tải.

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

GVHD: NGUYỄN THỊ THANH HUYỀN VŨ THỊ ÁNH NGUYỆT giới thiệu khái niệm ảnh nhị phân (binary image) là ảnh đen trắng, trong đó mỗi pixel có đúng một giá trị duy nhất là 0 hoặc 255 và được biểu diễn bằng 1 bit cho mỗi pixel.

Hình 2.4 trình bày ảnh nhị phân và ảnh xám (gray image) Ảnh xám là loại ả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ó một giá trị từ 0 đến 255 và được biểu diễn bằng 8 bit.

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 kết hợp ánh sáng đỏ (R), xanh lục (G) và xanh lam (B) để tạo ra các màu sắc khác nhau Mỗi pixel của ảnh chứa 3 giá trị kênh tương ứng với màu đỏ, màu xanh lục và màu xanh lam; mỗi giá trị là một số nguyên từ 0 đến 255, cho biết mức độ phát sáng của kênh đó Sự kết hợp của ba giá trị này tạo nên màu sắc cuối cùng hiển thị tại mỗi pixel Để biểu diễn một pixel ta dùng 24 bit, tương đương 3 byte (8 bit cho mỗi kênh).

Khi biểu diễn một ảnh màu, dữ liệu được tổ chức thành ba kênh màu đỏ, xanh lam và xanh lục (RGB) Để tiện cho lưu trữ và xử lý, ta tách ma trận ảnh thành ba ma trận con tương ứng với từng kênh màu: ma trận đỏ, ma trận xanh lam và ma trận xanh lục Ba ma trận này ghép lại theo thứ tự RGB sẽ tái tạo lại ảnh gốc, đồng thời giúp tối ưu hóa quá trình xử lý và lưu trữ dữ liệu hình ảnh.

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()

In OpenCV, the cv2.imwrite() function saves an image to disk, for example cv2.imwrite('firstimage.jpg', img_anh1) To read an input image, use OpenCV's imread() with the syntax imread('filename', flags).

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

Để xử lý ảnh trong mã Python, hãy đặt tên file ảnh (filename) vào trong thư mục chứa file py đang thực thi Nếu ảnh không ở đúng thư mục này, bạn cần cung cấp đường dẫn đầy đủ đến tệp chứa ảnh để script Python có thể truy cập được.

Đối số flags của hàm cv2.imread cho phép bạn chỉ định cách tải và hiển thị hình ảnh trong OpenCV Có ba tùy chọn phổ biến: cv2.imread_unchanged hoặc -1 tải đầy đủ 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 ở chế độ màu và bỏ qua kênh alpha, đây cũng là giá trị mặc đị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 ý với OpenCV là thư viện này đọc và xử lý ảnh màu ở định dạng BGR, trong khi hầu hết các thư viện thị giác máy tính khác dùng định dạng RGB Vì sự khác biệt này, khi kết hợp OpenCV với các công cụ hoặc thư viện yêu cầu RGB để hiển thị hoặc xử lý, bạn cần chuyển đổi màu từ BGR sang RGB trước khi tiếp tục Bạn có thể làm điều này bằng hàm cv2.cvtColor với tham số cv2.COLOR_BGR2RGB để chuyển đổi, hoặc ngược lại nếu bạn cần đưa ảnh trở về định dạng BGR để lưu trữ hoặc thao tác bằng OpenCV Việc chuẩn hóa định dạng màu giúp đảm bảo màu sắc chính xác trong các tác vụ như nhận diện, segmentation và hiển thị trên các nền tảng khác nhau.

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

Trong OpenCV, nếu chỉ dùng hàm imshow() để hiển thị ảnh thì cửa sổ sẽ không giữ lại trên màn hình để bạn quan sát và chương trình sẽ tiếp tục chạy, vì vậy cần kết hợp thêm hai hàm waitKey() và destroyAllWindows() hoặc destroyWindow() để duy trì hình ảnh trên màn hình và đóng cửa sổ đúng cách.

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

In OpenCV, the destroyAllWindows() function closes all windows that have been created If you only need to close a single window, pass the name of that window as the argument to the function.

Additionally, you can adjust the display window size using OpenCV's namedWindow function, specifying the window name and flags The flags can be WINDOW_AUTOSIZE (the default) or WINDOW_NORMAL, which allows you 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:

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()

Hình 3.4 minh họa quá trình xoay ảnh sau khi cắt Để xoay được ảnh, bước đầu là xác định gốc quay và hướng quay Sau khi gốc quay và hướng quay được xác định, ta tính ma trận quay Cuối cùng, ta nhân ma trận quay với ma trận ảnh gốc để thu được ảnh sau khi xoay.

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

Scale là hệ số tỉ lệ đẳng hướng dùng để điều chỉnh kích thước hình ảnh lên hoặc xuống theo một giá trị được khai báo, có thể là một số thực (floating-point) Ví dụ, giá trị 1.0 sẽ giữ nguyên kích thước ảnh đầu ra so với ảnh gốc, còn giá trị 2.0 sẽ làm ảnh đầu ra gấp đôi kích thước của ảnh gốc.

Ở bước cuối cùng, ta nhân hai ma trận để tạo ra ảnh xoay, đây là phép biến đổi affine OpenCV cung cấp hàm warpAffine() để thực hiện phép biến đổi này với cú pháp: warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) Trong đó, M là ma trận biến đổi affine, src là ảnh nguồn và dsize là kích thước ảnh đầu ra; các tham số bổ sung như dst, flags, borderMode và borderValue cho phép kiểm soát kết quả và biên của ảnh sau khi biến đổi.

 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 đó:

Trong xử lý hình ảnh, dsize đại diện cho kích thước mới của ảnh đầu ra (new_width, new_height) và được dùng để giữ nguyên tỷ lệ khung hình của ảnh gốc Đoạn mã minh họa cách giải quyết khi biết một kích thước cụ thể và cần tính kích thước còn lại sao cho tỷ lệ ban đầu được bảo toàn Với ảnh gốc kích thước 1280 x 913 và yêu cầu chỉnh chiều rộng về 700 pixel, ta dùng công thức new_height = original_height × new_width / original_width Áp dụng, new_height ≈ 913 × 700 / 1280 ≈ 499, do đó kích thước ảnh mới sẽ là khoảng 700 x 499 pixel (làm tròn).

# 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.1 M ộ t s ố phép bi ến đổ i c ấp xám cơ bả n

Phép đảo ảnh là thao tác xử lý ảnh grayscale trên mỗi điểm ảnh với giá trị xám r thuộc miền [0, L−1] Kết quả s được tính theo công thức s = (L−1) − r, trong đó s là giá trị xám sau đảo và r là giá trị xám gốc Vì L là mức xám tối đa, phép đảo ảnh sẽ nghịch ngược phổ xám: các điểm sáng nay trở nên tối và ngược lại Đoạn mã OpenCV có thể thực hiện điều này bằng cách áp dụng công thức trên cho toàn bộ ảnh hoặc triển khai qua bảng tra (LUT), từ đó đảo ngược ảnh xám một cách nhanh chóng và hiệu quả.

# 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 và mang lại ích lợi lớn cho việc cải thiện các chi tiết màu trắng và màu xám ở vùng tối Dưới sự hướng dẫn của GVHD Nguyễn Thị Thanh Huyền và Vũ Thị Ánh Nguyệt, nghiên cứu cho thấy ảnh âm bản có thể tăng cường độ tương phản và làm nổi bật các chi tiết ở vùng tối, từ đó nâng cao chất lượng hình ảnh cho các ứng dụng như nhiếp ảnh, in ấn và y học.

Logarithmic image transformation maps each input pixel r to s = c · log(1 + r), where r is the input pixel, c is a constant, and s is the transformed pixel The Python example includes a function Chuyen_doi_logarit(img, c) that returns float(c) * cv.log(1.0 + img), applying OpenCV's logarithmic operation, and a show_Chuyen_doi_logarit() routine that reads 'anh1.jpg', converts it to RGB, and displays the original and the log-transformed image side by side with Matplotlib; the transformed image is computed using c = 0.1 and is labeled with the titles 'Original Image' and 'Logarithmic Transformation' The code relies on OpenCV (cv2) for image processing and Matplotlib for plotting.

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 gamma có dạng s = c · r^γ, trong đó r là giá trị điểm ảnh đầu vào, c và γ là hằng số, còn s là điểm ảnh ở đầu ra Hàm gamma cho phép kiểm soát độ sáng và độ tương phản của ảnh bằng cách điều chỉnh gamma: γ nhỏ hơn 1 làm sáng ảnh, γ lớn hơn 1 làm tối ảnh khi đầu vào được chuẩn hóa về khoảng [0,1] Đoạn mã Python minh họa cách triển khai với OpenCV và Matplotlib: import cv2 as cv, import matplotlib.pyplot as plt; def Chuyen_Doi_Gamma(img, gamma, c): return float(c) * pow(img, float(gamma)) Hàm này nhận ảnh đầu vào, gamma và hệ số c rồi trả về ảnh sau biến đổi, và có thể được áp dụng cho ảnh grayscale hoặc ảnh màu và được hiển thị bằng Matplotlib sau khi xử lý.

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 gamma correction in image processing using OpenCV and matplotlib by loading the grayscale image 'anh1.jpg', creating a 2x2 grid of subplots, and displaying the original image alongside three gamma-adjusted versions produced by Chuyen_Doi_Gamma with gamma values 0.6, 0.3, and 0.1; each subplot is labeled with clear titles ('Original image', 'gamma=0.6', 'gamma=0.3', 'gamma=0.1') and shown in grayscale to compare contrast, with a final Python main guard that calls show_Chuyen_Doi_Gamma to render the visualization.

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

Hình 3.10 Ảnh biến đổi gamma

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

Để thực hiện cắt ngưỡng, ta chọn một giá trị ngưỡng T và duyệt qua từng pixel để so sánh giá trị xám với T Nếu giá trị xám nhỏ hơn T, ta gán cho pixel đó giá trị 0; nếu giá trị xám lớn hơn T, ta gán cho pixel đó giá trị (L - 1) Quá trình này cho ra một ảnh hai mức xám 0 và (L - 1) dựa trên ngưỡng đã chọn, giúp phân cực độ sáng và có thể điều chỉnh bằng tham số T và số mức xám L.

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

Mỗi điểm ảnh của ảnh 8 bit được biểu diễn bằng 8 mặt phẳng bit, đánh số từ 1 đến 8 và xếp chồng lên nhau theo thứ tự từ cao xuống thấp, với bit 8 nằm ở trên cùng và bit 1 ở dưới cùng Những mặt phẳng ở tầng trên chứa phần lớn thông tin có ý nghĩa của ảnh, trong khi các mặt phẳng ở tầng dưới chủ yếu lưu giữ dữ liệu chi tiết Cách sắp xếp này cho phép phân tích và xử lý hình ảnh ở nhiều mức độ quan trọng của từng bit, giúp tối ưu hóa quy trình nén, khôi phục và cải thiện chất lượng ảnh.

Kỹ thuật lát cắt mặt phẳng bit là phương pháp xử lý ảnh sử dụng các phép toán trên điểm ảnh để phân tách ảnh đa cấp xám thành nhiều ảnh nhị phân, từ đó xác định các mặt phẳng bit quan trọng và số lượng bit yêu cầu cho quá trình lượng tử hóa.

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)

Thực hành cùng thư viện OpenCV (kết hợp với numpy) bắt đầu bằng việc nhập và đọc ảnh ở chế độ xám (grayscale), sau đó ta tiến hành lần lượt các bước căn bản để xử lý ảnh, từ tải và hiển thị ảnh đến chuẩn hóa độ sáng và tương phản, áp dụng các phép biến đổi như ngưỡng và lọc, và kết thúc bằng lưu kết quả Quá trình này giúp người dùng làm quen với các thao tác xử lý ảnh bằng OpenCV kết hợp numpy, từ việc đọc ảnh grayscale cho đến thực thi các thuật toán xử lý và lưu ảnh đầu ra.

Ở bước đầu tiên, chúng ta làm việc với ảnh grayscale 8 bit Ta lấy danh sách các giá trị xám tại từng pixel và chuyển mỗi giá trị sang hệ nhị phân có độ dài 8 bit theo quy trình sau Mỗi pixel sẽ được biểu diễn bằng một chuỗi nhị phân 8 bit, giúp chuẩn hóa dữ liệu và chuẩn bị cho các bước xử lý hình ảnh 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

Bước 2: Khi đã có danh sách chứa các chuỗi nhị phân, ta duyệt qua từng phần tử nhị phân để tạo ra các mặt phẳng bit và thực hiện quá trình tách chiết, sau đó lưu kết quả vào từng danh sách riêng biệt để dữ liệu được tổ chức một cách có hệ thống.

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:

OpenCV cung cấp một hàm cân bằng histogram cho ảnh rất ngắn gọn và dễ dùng, với cú pháp equalizeHist(src), trong đó src là ảnh cần cân bằng Hàm này giúp cải thiện độ tương phản và làm nổi bật chi tiết ở vùng tối và sáng bằng cách phân phối lại cường độ sáng của các pixel Nhờ đó, bạn có ảnh có mức độ sáng đồng đều hơn, phù hợp cho các ứng dụng xử lý ảnh, nhận diện và phân tích 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, còn được gọi là kernel, filter hoặc mask, là một ma trận vuông có kích thước 3x3, 4x4 và các kích thước khác Mặt nạ lọc di chuyển trên ảnh và thao tác với các điểm ảnh lân cận để tính giá trị mới cho mỗi pixel, ứng với các phép xử lý như làm trung bình (averaging), làm trung vị (median), lấy giá trị tối đa (max), tối thiểu (min) và Gaussian Quá trình này giúp làm mịn ảnh, giảm nhiễu và cải thiện chất lượng hình ảnh tùy thuộc vào loại kernel được chọn.

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 (ma trận 3 x 3 hình xám ở hình trái) sẽ chập lên lân cận của điểm ảnh nó trượt qua để tạo ra từng phần tử của ma trận mới

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

Thao tác lân cận cùa bộ lọc này đó là tính trung bình các pixel lân cận của pixel trung tâm được ứng dụng để loại bỏ nhiễu, làm nổi các chi tiết lớn

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à tập hợp các kỹ thuật nhằm khôi phục nội dung và chất lượng của một ảnh bị suy thoái hoặc méo mó Quá trình này tập trung vào tái tạo các chi tiết gốc và khôi phục tính trung thực cho hình ảnh Cần phân biệt khôi phục ảnh với tăng cường chất lượng ảnh, vì tăng cường chỉ cải thiện độ sắc nét, tương phản hoặc màu sắc mà không nhất thiết khôi phục nội dung gốc.

Khôi phục ảnh dựa trên một mô hình suy thoái chất lượng ảnh đã được biết rõ hoặc có thể ước lượng, nhằm tái tạo lại thông tin bị mất và cải thiện chi tiết cho hình ảnh Đồng thời, tăng cường ảnh là quá trình tối ưu hóa chất lượng để tạo ra một bức ảnh phù hợp cho các nhiệm vụ cụ thể, trong khi khôi phục ảnh hướng tới đưa ảnh về trạng thái ban đầu càng gần với nguyên bản.

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

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 bài viết này, chúng ta sẽ sử dụng kết hợp thư viện numpy để sinh nhiễu theo một hàm đã cho Đối với nhiễu Gaussian, numpy cung cấp hàm normal(loc, scale, size), nơi loc đại diện cho giá trị trung bình, scale là độ lệch chuẩn và size là kích thước của ảnh hoặc dữ liệu cần tạo nhiễu Việc nắm vững các tham số này sẽ cho phép tạo nhiễu có đặc tính mong muốn; ví dụ để tạo nhiễu Gaussian cho một ảnh 256×256 với trung bình 0 và độ lệch chuẩn 1, bạn có thể dùng noise = np.random.normal(0, 1, (256, 256)).

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 là hiện tượng đặc trưng bởi một đ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, làm mất đi sự đồng nhất của bức ảnh Xung nhiễu có thể âm hoặc dương: xung nhiễu âm đại diện cho điểm ảnh đen (nhiễu hạt tiêu), trong khi xung nhiễu dương đại diện cho điểm ảnh trắng.

(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

Để khôi phục ảnh hiệu quả, nhận diện mô hình nhiễu bắt đầu bằng việc quan sát histogram và phân tích các đặc trưng nhiễu trên ảnh Khi xác định đúng loại nhiễu, ta có thể chọn bộ lọc khôi phục phù hợp nhất nhằm loại bỏ nhiễu đồng thời bảo toàn chi tiết và cấu trúc của ảnh Quá trình này tối ưu hóa kết quả khôi phục ảnh, mang lại hình ảnh sạch hơn và chất lượng cao hơn nhờ các kỹ thuật lọc tiên tiến.

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

Một vùng ảnh là tập hợp các điểm ảnh có chung một hoặc nhiều thuộc tính của đối tượng trong ảnh Phân vùng ảnh là quá trình chia ảnh thành n vùng riêng biệt sao cho việc ghép lại các vùng sẽ khớp với ảnh ban đầu Mục đích của phân vùng ảnh là giúp máy tính hiểu được các thuộc tính của ảnh, từ đó hỗ trợ các tác vụ như dò tìm đối tượng và phân lớp ảnh cùng các hoạt động xử lý ảnh khác Quá trình phân vùng ảnh dựa trên sự biến đổi đột ngột của cường độ mức xám (phát hiện biên/cạnh) hoặc dựa trên các tiêu chí xác định trước.

Phân loại ảnh dựa trên sự thay đổi đột ngột về cường độ mức xám, bằng cách sử dụng các bộ lọc đạo hàm bậc 1 và bậc 2 đã trình bày trong phần Lọc sắc nét ảnh, nhằm nhận diện biên và cạnh một cách chính xác Việc áp dụng các bộ lọc này giúp phát hiện sự biến đổi cường độ nhanh tại các vùng biên, từ đó nâng cao hiệu suất và độ chính xác của hệ thống phân loại hình ảnh Đây là phương pháp phổ biến trong xử lý ảnh để tối ưu hóa đặc trưng biên và tăng chất lượng kết quả phân loại.

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

Phân loại ảnh dựa trên tập các tiêu chí xác định trước, được phân thành 4 nhóm chính: dựa trên kỹ thuật cắt ngưỡng, dựa trên thuộc tính vùng ảnh, dựa trên kỹ thuật phân cụm và dựa trên kỹ thuật học máy; trong chương này, chúng ta tập trung tìm hiểu hai kỹ thuật chủ đạo là cắt ngưỡng và thuộc tính vùng ảnh, đồng thời trình bày cách áp dụng, so sánh ưu nhược và gợi ý thực hành để người đọc nắm bắt nhanh các khái niệm và ứng dụng trong nhận diện và xử lý ảnh.

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 dùng để chuyển đổi giá trị xám của ảnh về một giá trị xám chung duy nhất Bằng cách chọn một ngưỡng và so sánh từng mức xám với ngưỡng đó, các giá trị xám được gán lại thành một mức xám mới; ví dụ cắt ngưỡng nhị phân cho phép ảnh chỉ có hai mức 0 hoặc 1, đồng thời kỹ thuật này được sử dụng cho phân đoạn ảnh và làm tiền xử lý cho các bước phân tích hình ảnh sau này.

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ả nhị phân phụ thuộc vào cách chọn ngưỡng; nếu ngưỡng quá cao có thể làm mất đi một số chi tiết quan trọng của ảnh Vì vậy, thuật toán tìm ngưỡng Otsu dựa trên histogram của ảnh được dùng để tự động xác định ngưỡng tối ưu, tối ưu hóa sự phân tách giữa vùng sáng và vùng tối và giảm thiểu lẫn lộn giữa hai lớp, từ đó cho ra kết quả nhị phân có chất lượng cao và phù hợp cho nhận diện, phân tích ảnh.

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

Phương pháp nở vùng ảnh (region growing) là một kỹ thuật phân đoạn hình ảnh nhằm nhóm các pixel hoặc vùng con thành các vùng lớn hơn dựa trên các tiêu chí xác định trước Ý tưởng cốt lõi là bắt đầu từ một tập điểm được gọi là hạt giống và từ đó mở rộng vùng ảnh bằng cách thêm các pixel lân cận có thuộc tính tương tự hạt giống, chẳng hạn như giá trị mức xám hoặc màu sắc Quá trình này tiếp tục cho đến khi không còn pixel nào thỏa mãn điều kiện mở rộng thì dừng, mỗi vùng được hình thành sẽ mang đặc trưng đồng nhất về mức độ sáng hoặc màu sắc Phương pháp nở vùng ảnh mang lại hiệu quả cho phân đoạn hình ảnh và xử lý thị giác máy tính nhờ khả năng kiểm soát dựa trên đặc trưng cận biên và ngưỡng xác định trước.

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

Bước 2 của quá trình xử lý ảnh dựa trên đặc tính Q cho trước, ta xác định và thu thập tất cả các thành phần liên kết liên quan đến pixel hạt giống Ta lựa chọn giữa kết nối 4-lân cận hoặc 8-lân cận và mở rộng từ pixel hạt giống để bao phủ toàn bộ vùng chứa các pixel hạt giống S(x, y) Kết quả thu được là tập hợp các thành phần liên kết được xác định dựa trên quy tắc kết nối đã chọn, phục vụ cho các bước phân tích và xử lý ảnh tiếp theo.

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

Ngày đăng: 07/12/2022, 20:23

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w