Giới thiêu về khôi phục ảnh
Khôi phục ảnh là quá trình giảm thiểu hoặc loại bỏ các tác động từ môi trường bên ngoài và hệ thống thu nhận ảnh Mục tiêu chính của khôi phục ảnh là xác định mô hình toán học của quá trình gây ra biến dạng và sau đó sử dụng ánh xạ ngược để tái tạo lại hình ảnh.
Bất kỳ hình ảnh nào được ghi lại bằng thiết bị điện, quang điện hoặc quang học đều có thể bị nhiễu do môi trường cảm biến Các loại nhiễu này có thể bao gồm nhiễu từ hệ thống, mờ do lệch tiêu điểm của camera, nhiễu ngẫu nhiên do chuyển động giữa camera và đối tượng, cũng như nhiễu do điều kiện khí quyển.
Khôi phục ảnh là quá trình sử dụng các bộ lọc để giảm thiểu ảnh hưởng của nhiễu, nhằm tạo ra ảnh kết quả gần giống với ảnh gốc Hiệu quả của các bộ lọc phụ thuộc vào việc nhận biết quá trình nhiễu và thu nhận hình ảnh, thường được thực hiện trên miền tần số với các kỹ thuật như lọc ngược và lọc bình phương tối thiểu Mục đích chính của xử lý ảnh là đáp ứng nhu cầu truyền thông tin ngày càng cao, đặc biệt trong giải trí, nghiên cứu và trao đổi Trong quá trình này, các tác động xấu từ môi trường có thể làm hư hại ảnh, do đó cần loại bỏ các tín hiệu không mong muốn để khôi phục chất lượng ảnh Mục tiêu của khôi phục ảnh là nâng cao chất lượng so với ảnh gốc, tuy nhiên, khôi phục và nâng cao chất lượng ảnh có sự khác biệt: nâng cao chất lượng là cải thiện theo mục tiêu chủ quan, trong khi khôi phục là loại bỏ hư hại dựa trên tiêu chuẩn khách quan.
Khi một bức ảnh bị hư hại, giá trị mức xám và vị trí của các pixel là hai đại lượng bị ảnh hưởng nhiều nhất Giá trị mức xám có thể bị biến đổi, trong khi vị trí các pixel có thể bị méo mó, dẫn đến việc ảnh trở nên mờ hoặc biến dạng Để khôi phục ảnh hoàn chỉnh, cần cải thiện giá trị mức xám của các pixel và khôi phục kích thước hình học của ảnh thông qua phép ghi ảnh Phép ghi ảnh cho phép nhận diện các điểm tương ứng của hai ảnh trong cùng một vùng dưới các góc nhìn khác nhau Sự khôi phục này đóng vai trò quan trọng trong chụp ảnh và truyền ảnh từ xa, đặc biệt trong lĩnh vực ghi ảnh y-sinh học và liên lạc vũ trụ.
Sinh Viên: Nguyễn Trường Giang Page 3
Phục chế ảnh là quá trình giảm hoặc loại bỏ sự thoái hóa và suy giảm chất lượng hình ảnh Một ví dụ về sự giảm sút chất lượng là hiện tượng "nhiễu", thường xảy ra do độ phân giải thấp hoặc hiệu ứng ống kính như nhòe do chuyển động Nhiều công nghệ phục chế đã thành công trong việc khôi phục các vùng ảnh bằng cách cải thiện độ phân giải tại từng khu vực, trong khi một số khác áp dụng giải pháp trong miền tần số Mặc dù khôi phục ảnh là một lĩnh vực quan trọng trong công nghệ ảnh số, bài viết này sẽ tập trung vào phương pháp khôi phục ảnh thay vì nguyên nhân gây suy giảm chất lượng.
Mô hình suy thoái ảnh
Trong không gian miền, ta có bức ảnh \$f(x, y)\$ và không gian lọc \$h(x, y)\$ để xử lý hình ảnh bị nhiễu Nếu \$h(x, y)\$ chỉ bao gồm một dòng đơn nhất, kết quả thu được sẽ là sự nhòe theo phương hướng của dòng đó Ta có thể diễn đạt mối quan hệ này bằng công thức: \$g(x, y) = f(x, y) * h(x, y)\$.
Trong không gian lọc, cần xem xét thêm sự nhiễu được mô hình hóa như một chức năng của cuộn lại (sự thu nhận hình ảnh) Nếu ký hiệu η(x, y) đại diện cho biến cố ngẫu nhiên, bức ảnh bị hư hại có thể được biểu diễn bằng công thức: $$g(x, y) = f(x, y) * h(x, y) + η(x, y)$$
Chúng ta có thể biểu diễn các hoạt động tương tự trong miền tần số, trong đó sự nén lại được thay thế bằng phép nhân và được bổ sung bởi tính tuyến tính của biến đổi Fourier.
Để khôi phục bức ảnh bị suy thoái F, chúng ta cần biết giá trị của H và N, và có thể sử dụng phương trình tương ứng với các biến đổi f, h và n.
Phương pháp này được coi là phi thực tiễn do thiếu thông tin về các giá trị của η(i, j) và N(i, j), mặc dù chúng ta đã có một số thống kê và sự nhiễu Hơn nữa, việc chia nhỏ H(i, j) gặp khó khăn khi có các giá trị gần bằng, ngang bằng hoặc bằng 0.
Sinh Viên: Nguyễn Trường Giang Page 4
thiệu chung về phần mềm Matlab
Khái niệm về Matlab
Matlab là phần mềm ứng dụng do hãng Mathwork phát triển, chạy trên hệ điều hành Windows, và là ngôn ngữ lập trình bậc cao dùng để giải quyết các bài toán kỹ thuật Phần mềm này tích hợp tính toán và hiển thị kết quả, đồng thời cung cấp giao diện thân thiện, dễ sử dụng Với dữ liệu và thư viện lập trình sẵn, người dùng có thể tạo ra nhiều ứng dụng hữu ích.
- Sử dụng các hàm có sẵn trong thư viện, các phép tính toán học thông thường
- Cho phép lập trình tạo ra những ứng dụng mới
- Cho phép mô phỏng các mô hình thực tế
- Phân tích, khảo sát và hiển thị dữ liệu
- Với phần mềm đồ hoạ cực mạnh
- Cho phép phát triển, giao tiếp với một số phần mềm khác như C++, Fortran
Tổng quan về cấu trúc dữ liệu của Matlab, các ứng dụng
Matlab là một hệ thống tương giao với các phần tử dữ liệu dạng mảng, không yêu cầu kích thước cụ thể Nó cho phép giải quyết các vấn đề lập trình máy tính, đặc biệt là các phép toán về ma trận và vectơ Người dùng có thể sử dụng ngôn ngữ C hoặc Fortran để lập trình và thực hiện ứng dụng thông qua các câu lệnh trong Matlab Tên gọi Matlab được viết tắt từ “MATrix LABoratory”, phản ánh mục tiêu cung cấp truy cập dễ dàng vào phần mềm ma trận, được phát triển từ các công trình Linpack và Eispack Hiện nay, Matlab tiếp tục được phát triển bởi Lapack và Artpack, tạo nên một nghệ thuật phần mềm cho ma trận.
Dữ liệu của Matlab thể hiện dưới dạng ma trận (hoặc mảng - tổng quát), và có các kiểu dữ liệu được liệt kê sau đây:
Kiểu dữ liệu đơn (single) tiết kiệm bộ nhớ vì yêu cầu ít byte hơn, nhưng không được sử dụng trong các phép toán học do độ chính xác kém Ngược lại, kiểu dữ liệu kép (double) là kiểu phổ biến nhất cho các biến trong Matlab.
-Kiểu uint8, uint8, uint16, uint64
-Kiểu char ví dụ “Hello”
-Trong Matlab kiểu dữ liệu double là kiểu mặc định sử dụng trong các phép tính số học
Sinh Viên: Nguyễn Trường Giang Page 5
Matlab tạo điều kiện thuận lợi cho:
-Các khoá học về toán học
-Các kỹ sư, các nhà nghiên cứu khoa học
-Dùng Matlab để tính toán, nghiên cứu tạo ra các sản phẩm tốt nhất trong sản xuất
1.2.3 Toolbox là một công cụ quan trọng trong Matlab
Công cụ này được Matlab cung cấp cho phép bạn ứng dụng các kỹ thuật để phân tích, thiết kế, mô phỏng các mô hình
Ta có thể tìm thấy toolbox ở trong mô trường làm việc của
Hệ thống Matlab
Hệ thống giao diện của Matlab được chia thành 5 phần:
Môi trường phát triển là không gian chứa các thanh công cụ và phương tiện hỗ trợ người dùng trong việc thực hiện các lệnh và quản lý các file.
Thư viện toán học cung cấp nhiều hàm hữu ích, bao gồm các cấu trúc như tính tổng, sin, cos, atan, và atan2 Nó hỗ trợ từ các phép tính đơn giản đến những phép toán phức tạp như tính ma trận nghịch đảo, trị riêng, và các phép biến đổi Fourier, Laplace Ngoài ra, thư viện còn bao gồm các công cụ cho phép xử lý biểu thức đại số một cách tượng trưng.
Ngôn ngữ Matlab là một ngôn ngữ lập trình cao cấp chuyên về ma trận và mảng, cho phép người dùng thực hiện các dòng lệnh, sử dụng các hàm và cấu trúc dữ liệu đầu vào, đồng thời hỗ trợ lập trình hướng đối tượng.
Đồ họa trong Matlab bao gồm các lệnh để thể hiện hình ảnh trong môi trường 2D và 3D, tạo ra các hình ảnh chuyển động và cung cấp giao diện tương tác giữa người sử dụng và máy tính.
• Giao tiếp với các ngôn ngữ khác Matlab cho phép tương tác với các ngôn ngữ khác như C, Fortran …
Làm quen với Matlab
Để khởi động Matlab, bạn cần nhấp vào biểu tượng file Matlab.exe, sau đó một cửa sổ sẽ xuất hiện (Xem hình vẽ 1.1) Cửa sổ này bao gồm các thanh công cụ cần thiết cho việc quản lý files, biến và cửa sổ lệnh Desktop trong Matlab có thể được coi là các panel với các ô và vùng, giúp quản lý và điều khiển các cửa sổ nhỏ bên trong.
Sinh Viên: Nguyễn Trường Giang Page 6
Hình 2.1: Cửa sổ làm việc của matlab
Các cửa sổ làm việc của Matlab
Cửa sổ giao tiếp chính của Matlab cho phép người dùng nhập giá trị biến, hiển thị và tính toán giá trị của biểu thức, cũng như thực thi các hàm có sẵn trong thư viện.
Người dùng có thể nhập lệnh hoặc hàm được lập trình trong M-file sau dấu nhắc “>>” Nếu có lỗi trong quá trình nhập lệnh, hãy nhấn phím Enter cho đến khi nhận được dấu nhắc “>>” và thực thi lệnh bằng cách nhấn phím Enter.
Hoặc chương trình soạn thảo trong M-file dưới đây:
% Chuong trinh trong M-file x= 0:pi/6:2*pi; y=sin(x);
Sinh Viên: Nguyễn Trường Giang Page 7 plot(x, y);
% chuong trinh được lưu với tên file là “ve_sin.m” b)Cửa sổ command History
Các lệnh và biến bạn nhập vào cửa sổ Command Window sẽ được lưu lại trong cửa sổ Command History Cửa sổ này cho phép bạn dễ dàng sử dụng lại các lệnh hoặc biến bằng cách nhấp chuột vào chúng.
Hình 2.2 Cửa sổ Command History c) Cửa sổ Workspace
Cửa sổ này hiển thị tên các biến, kích thước vùng nhớ (số bytes), kiểu dữ liệu (lớp) và các biến được giải phóng sau mỗi lần tắt chương trình.
Sinh Viên: Nguyễn Trường Giang Page 8
Ngoài ra, người dùng có thể thay đổi giá trị và kích thước của biến bằng cách nhấp chuột vào các biến hoặc nhấn nút bên trái cạnh nút lưu Ví dụ, khi chọn biến (giả sử là biến b) và nhấp chuột, cửa sổ Variable Editor sẽ xuất hiện (xem hình 1.4).
Hình 2.4 Cửa sổ Variable Editor
Tiêu đề là tên biến b, với định dạng dữ liệu là Numeric format, mặc định là dạng short và kích thước là 1 by 3 (một hàng và 3 cột) Kích thước này có thể thay đổi bằng cách điều chỉnh giá trị trong ô kích thước size Cửa sổ này cho phép lưu trữ các biến dưới dạng dữ liệu của biến b, và chúng có thể được thay đổi thông qua các ô tương ứng Tất cả các biến được lưu trong Workspace, hiển thị kích thước (Size), số Bytes và kiểu dữ liệu (class), trong đó mỗi phần tử dữ liệu kiểu double chiếm 8 bytes, cụ thể là 24 bytes cho b và 8 bytes cho a.
Cửa sổ này được sử dụng để soạn thảo chương trình ứng dụng và thực thi các chương trình viết trong M-file bằng cách nhập tên file chứa chương trình vào cửa sổ.
Sinh Viên: Nguyễn Trường Giang Page 9
Commandwindow Khi một chương trình viết trong M-file, thì tuỳ theo ứng dụng cụ thể, tuỳ theo người lập trình mà chương trình có thể viết dưới dạng sau:
Dạng Script file là chương trình bao gồm một tập hợp các câu lệnh được liệt kê, không có biến dữ liệu đầu vào và biến lấy giá trị đầu ra.
- Dạng hàm function: có biến dữ liệu vào và biến ra e) Đường dẫn thư mục: Nơi lưu giữ các files chương trình.
Giới thiệu khái quát về ảnh số
1.6.1 Các khái niệm cơ bản về ảnh Ảnh số là tập hợp hữu hạn các điểm ảnh với mức xám phù hợp dùng để mô tả ảnh gần với ảnh thật Số điểm ảnh xác định độ phân giải của ảnh Ảnh có độ phân giải càng cao thì càng thể hiện rõ nét các đặt điểm của tấm hình càng làm cho tấm ảnh trở nên thực và sắc nét hơn a) Điểm ảnh (Picture Element) Điểm ảnh (Pixel) là một phần tử của ảnh số tại toạ độ (x, y) với độ xám hoặc màu nhất định Kích thước và khoảng cách giữa các điểm ảnh đó được chọn thích hợp sao cho mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc màu) của ảnh số gần như ảnh thật Mỗi phần tử trong ma trận được gọi là một phần tử ảnh b) Mức xám của ảnh
Mức xám là kết quả của sự biến đổi giữa giá trị độ sáng của một điểm ảnh và một giá trị nguyên dương, thường nằm trong khoảng [0, 255] Các thang giá trị mức xám phổ biến bao gồm 16, 32, 64, 128 và 256, trong đó mức 256 được sử dụng rộng rãi do kỹ thuật máy tính sử dụng 1 byte (8 bit) để biểu diễn mức xám, cho phép 256 mức từ 0 đến 255 Độ phân giải của ảnh được định nghĩa là mật độ điểm ảnh được ấn định trên một ảnh số hiển thị.
Khoảng cách giữa các điểm ảnh cần được chọn sao cho mắt người vẫn nhận thấy sự liên tục của hình ảnh Lựa chọn khoảng cách thích hợp tạo ra mật độ phân bổ, hay còn gọi là độ phân giải, được phân bố theo trục x và y trong không gian hai chiều.
Ví dụ: Độ phân giải của ảnh trên màn hình CGA (Color Graphic Adaptor) là một lưới điểm theo chiều ngang màn hình: 320 điểm chiều dọc * 200 điểm
Màn hình CGA 12” cho hình ảnh mịn hơn so với màn hình CGA 17” ở cùng độ phân giải 320*200 Nguyên nhân là do mặc dù có cùng mật độ điểm ảnh, nhưng diện tích màn hình lớn hơn dẫn đến độ mịn của hình ảnh giảm.
Các cách phân loại ảnh
Ảnh nhị phân chỉ sử dụng giá trị 1 hoặc 0 cho mỗi điểm ảnh, do đó mỗi điểm ảnh được biểu diễn bằng 1 bit Trong khi đó, ảnh xám có giá trị nằm trong khoảng [0, 255], với mỗi điểm ảnh được biểu diễn bằng 1 byte Ảnh màu cung cấp nhiều thông tin hơn về màu sắc.
Một pixel được biểu diễn bằng 3 giá trị (R, G, B) trong đó R, G, B là một giá trị xám và được biểu biểu diễn bằng 1 byte Khi đó ta có một ảnh 24 bits
- Hệ màu CMY: là phần bù của hệ màu RGB
=> Hệ màu này thường được dùng trong máy in
- Hệ màu CMYK: trong đó K là độ đậm nhạt của màu K= min(C, M, Y)
Với (C1, M1, Y1) ta sẽ có K=min(C1, M1, Y1) vậy CMYK=(C1-K, M1-K, Y1-K, K)
Xử lý ảnh với Matlab
Các bước cần thiết trong xử lý ảnh bắt đầu bằng việc thu nhận ảnh từ thế giới bên ngoài qua các thiết bị như camera Trước đây, ảnh được thu qua camera là ảnh tương tự, nhưng với sự phát triển công nghệ, ảnh màu hoặc đen trắng hiện nay được chuyển trực tiếp thành ảnh số, tạo điều kiện thuận lợi cho các bước xử lý tiếp theo.
Nguyễn Trường Giang là một ví dụ điển hình trong lĩnh vực xử lý ảnh Ảnh có thể được thu nhận từ vệ tinh hoặc quét từ các hình ảnh chụp bằng máy quét Các bước cơ bản trong quá trình xử lý ảnh được mô tả trong hình dưới đây.
Hình 2.5 Các bước cơ bản trong xử lý ảnh
3.2 Các giai đoạn xử lý ảnh a) Thu nhận ảnh (Image Acquisition)
- Ảnh được thu từ nhiều nguồn khác nhau:máy ảnh, máy quay phim, máy quét, ảnh vệ tinh…
Mục đích của việc biến đổi thông tin hình ảnh là để chuyển đổi các cấu trúc được lưu trữ trong máy tính, từ đó có thể hiển thị trên các thiết bị ngoại vi như máy in và màn hình.
+ Biến đổi năng lượng quang học thành năng lượng điện
+ Tổng hợp năng lượng điện thành ảnh hoặc ma trận số b) Tiền xử lý (PreProcessing)
- Là quá trình sử dụng các kỹ thuật xử lý ảnh để làm ảnh tốt lên theo mục đích sử dụng
Để cải thiện chất lượng hình ảnh, cần điều chỉnh độ chiếu sáng nhằm khắc phục tình trạng chiếu sáng không đều Đồng thời, việc giảm thiểu các thành phần nhiễu, tức là các đối tượng không mong muốn xuất hiện trong ảnh, cũng rất quan trọng Cuối cùng, hiệu chỉnh giá trị độ sáng giữa nền và đối tượng sẽ giúp tạo ra sự cân bằng và rõ ràng hơn cho hình ảnh.
+ Chuẩn hoá độ lớn, màu, dạng của ảnh
+ Điều chỉnh bộ lọc để khuyếch đại và nén các tần số c) Phân đoạn (Segmentation)
Sinh Viên: Nguyễn Trường Giang Page 12
- Là quá trình phân chia nội dung các đối tượng cần khảo sát ra khỏi ảnh
- Phân chia các đối tượng tiếp giáp nhau
Phân tách các đối tượng riêng biệt thành các đối tượng con là bước quan trọng trong biểu diễn ảnh Đầu ra của quá trình phân đoạn bao gồm các điểm ảnh của vùng ảnh đã phân đoạn cùng với mã liên kết với các vùng lân cận Để xử lý tiếp theo bằng máy tính, việc biến đổi các số liệu này thành dạng thích hợp là cần thiết Trích chọn đặc trưng, hay việc chọn các tính chất để thể hiện ảnh, giúp tách các đặc tính của ảnh dưới dạng thông tin định lượng, từ đó phân biệt các lớp đối tượng khác nhau trong ảnh nhận được.
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ự là rất quan trọng để phân biệt chúng với nhau Nhận dạng và nội suy ảnh đóng vai trò then chốt trong quá trình này.
Nhận dạng ảnh là quá trình xác định và phân loại hình ảnh bằng cách so sánh với các mẫu chuẩn đã được học trước đó Quá trình này bao gồm việc nội suy, tức là đưa ra phán đoán dựa trên những gì đã được nhận diện.
Một loạt chữ số và nét gạch ngang trên phong bì thư có thể được chuyển đổi thành mã điện thoại Có nhiều cách phân loại ảnh khác nhau Theo lý thuyết nhận dạng, các mô hình toán học về ảnh được chia thành hai loại nhận dạng cơ bản.
- Nhận dạng theo tham số
- Nhận dạng theo cấu trúc
Hiện nay, trong khoa học và công nghệ, có nhiều phương pháp nhận dạng phổ biến như nhận dạng ký tự (bao gồm chữ in, chữ viết tay và chữ ký điện tử), nhận dạng văn bản, nhận dạng vân tay, nhận dạng mã vạch và nhận dạng khuôn mặt Những công nghệ này đóng vai trò quan trọng trong việc phát triển cơ sở tri thức.
Ảnh là một đối tượng phức tạp với nhiều yếu tố như đường nét, độ sáng tối và dung lượng điểm ảnh, dẫn đến sự xuất hiện của nhiễu Trong quá trình xử lý và phân tích ảnh, việc đơn giản hóa các phương pháp toán học là cần thiết để thuận tiện cho việc xử lý Đồng thời, người ta cũng mong muốn mô phỏng quy trình tiếp nhận và xử lý ảnh giống như con người Hiện nay, nhiều bước trong quy trình xử lý đã áp dụng các phương pháp trí tuệ nhân tạo, từ đó phát huy được các cơ sở tri thức.
Sinh Viên: Nguyễn Trường Giang Page 13
Các hàm xử lý ảnh trong matlab
Các hàm xử lý ảnh cơ bản trong Matlab
2.1 Đọc và ghi dữ liệu ảnh Đọc một ảnh đồ hoạ
Hàm imread trong Matlab cho phép đọc ảnh từ nhiều định dạng khác nhau với các chiều sâu bit khác nhau Thông thường, các file ảnh sử dụng 8 bit cho giá trị pixel và được lưu trữ dưới dạng uint8 trong bộ nhớ Đối với các file 16 bit như PNG và TIFF, chúng được lưu trữ dưới dạng uint16 Đặc biệt, với ảnh chỉ số, imread luôn đọc bản đồ màu vào một chuỗi thuộc lớp double, ngay cả khi mảng ảnh thuộc lớp uint8 hoặc uint16.
- Chẳng hạn, đoạn mã sau sẽ đọc một ảnh RGB vào không gian làm việc của Matlab lưu trong biến RGB
Hàm imread trong Matlab có khả năng tự nhận diện định dạng file từ tên file, nhưng người dùng cũng có thể chỉ định định dạng file như một tham số Matlab hỗ trợ nhiều định dạng đồ họa phổ biến như BMP, GIF, JPEG, PNG, và TIFF Để tìm hiểu thêm về các kiểu gọi hàm và tham số, người dùng có thể tham khảo trợ giúp online của Matlab.
Matlab hỗ trợ nhiều định dạng file đồ họa như HDF và TIFF, trong đó chứa nhiều ảnh Mặc định, hàm imread chỉ nhập ảnh đầu tiên trong file Để nhập thêm ảnh từ file, bạn cần sử dụng cú pháp phù hợp với định dạng file Ví dụ, khi làm việc với TIFF, bạn có thể chỉ định một chỉ số với imread để chọn ảnh mà bạn muốn nhập.
The following example reads a sequence of 27 images from a TIFF file and stores them in a 4-dimensional array We can use the `iminfo` function to check how many images are stored in the file The code initializes a 4-D array with the command: `mri = uint8(zeros(128,128,1,27));` to preallocate space for the images.
[mri(:,:,:,frame),map] = imread('mri.tif',frame);
Khi lưu trữ nhiều ảnh theo thứ tự thời gian trong Matlab, ta có thể sử dụng mảng 4 chiều, với điều kiện tất cả các ảnh phải có cùng kích thước.
Ghi một ảnh đồ hoạ
Hàm imwrite cho phép ghi ảnh vào file đồ họa với các định dạng được hỗ trợ Cấu trúc cơ bản của hàm này yêu cầu hai tham số: một biến ảnh và tên file.
Sinh Viên: Nguyễn Trường Giang Page 15
Nếu ta gộp một phần mở rộng trong tên file, Matlab sẽ nhận ra định dạng mong muốn từ nó
This example demonstrates how to load an image index X from a map file that combines color mapping, and subsequently saves the image as a bitmap file.
X 200x320 512000 double array caption 2x1 4 char array map 81x3 1944 double array
Grand total is 64245 elements using 513948 bytes imwrite(X,map,'clown.bmp')
Chỉ ra định dạng phụ - Tham số đặc biệt
Khi sử dụng hàm imwrite với các định dạng đồ họa, người dùng có thể chỉ định các tham số phụ Đặc biệt, với định dạng PNG, có thể chỉ định độ sâu bit như một tham số Ví dụ, để lưu một ảnh cường độ I dưới dạng file PNG 4 bit, ta sử dụng cú pháp: imwrite(I,'clown.png','BitDepth',4);
- Để biết thêm các cấu trúc khác của hàm xem phần trợ giúp trực tuyến của Matlab Đọc và ghi ảnh nhị phân theo định dạng 1 bit
Trong một số định dạng file, ảnh nhị phân có thể được lưu dưới dạng 1 bit Nếu định dạng file hỗ trợ, Matlab sẽ ghi ảnh nhị phân theo mặc định dưới dạng 1 bit Khi đọc ảnh nhị phân với định dạng này, Matlab sẽ đại diện nó trong không gian làm việc dưới dạng một mảng lôgic.
Ví dụ sau đây minh họa cách đọc một ảnh nhị phân và lưu trữ nó dưới dạng file TIFF Định dạng TIFF hỗ trợ ảnh 1 bit, do đó file được ghi lên đĩa theo định dạng 1 bit.
To check the bit depth of the file 'test.tif', first read the image using the command \$ BW = \text{imread}('text.png') \$ and save it with \$ \text{imwrite}(BW, 'test.tif') \$ Then, use the \$ \text{imfinfo}('test.tif') \$ function to retrieve the file information and examine the \$ \text{BitDepth} \$ field, which will return a value of 1.
Chú ý: Khi ghi file nhị phân, Matlab thiết lập trường ColorType thành ‘grayscale’
Sinh Viên: Nguyễn Trường Giang Page 16
Xem lớp lưu trữ của file
- Hàm imwrite sử dụng luật sau đây để quyết định lớp lưu trữ được sử dụng trong ảnh kết quả:
Nếu định dạng ảnh đầu ra được chỉ định là hỗ trợ ảnh 1 bit, hàm imwrite sẽ tạo ra một tệp ảnh 1 bit Ngược lại, nếu định dạng ảnh đầu ra không hỗ trợ ảnh 1 bit, hàm sẽ không tạo ra tệp ảnh đó.
1 bit (như JPEG), hàm imwrite chuyển ảnh tới một ảnh thuộc lớp uint8
+ uint8: Nếu định dạng ảnh ra được chỉ rõ là trợ giúp ảnh 8 bit, hàm imwrite tạo một ảnh 8 bit
Hàm imwrite sẽ tạo ra ảnh 16 bit nếu định dạng đầu ra hỗ trợ ảnh 16 bit như PNG hoặc TIFF Ngược lại, nếu định dạng không hỗ trợ, hàm sẽ chuyển đổi dữ liệu ảnh sang lớp uint8 và tạo ra ảnh 8 bit.
+ double: Matlab chuyển dữ liệu ảnh tới dạng uint8 và tạo một ảnh 8 bit bởi vì hầu hết các file ảnh sử dụng định dạng 8 bit
Truy vấn một file đồ hoạ
- Hàm imfinfo cho phép ta có thể nhận được thông tin về một file ảnh được trợ giúp bởi toolbox
Cú pháp: imfinfo(filename,fmt)
The imfinfo function provides essential information about an image file, including the filename, file modification date, file size, format, format version, width, height, bit depth, and color type The specific details returned depend on the file type, but the information consistently includes these key attributes.
- Số version của định dạng file
- Ngày sửa đổi file gần nhất
- Kích thước file tính theo byte
- Chiều rộng ảnh tính theo pixel
- Chiều cao ảnh tính theo pixel
- Số lượng bít trên một pixel
- Kiểu ảnh: RGB, chỉ số …
Để hiển thị một bức ảnh trong Matlab, bạn có thể sử dụng hàm imview Đầu tiên, hãy nhập ảnh vào không gian làm việc bằng cách sử dụng hàm imread, ví dụ: moonfig = imread('moon.tif'); sau đó, sử dụng imview(moonfig) để hiển thị bức ảnh.
Sinh Viên: Nguyễn Trường Giang Page 17
Ta cũng có thể chỉ định tên của file ảnh như trong ví dụ sau: imview('moon.tif');
Biến đổi không gian ảnh
Biến đổi không gian ảnh là thực hiện ánh xạ giữa vị trí các pixel trong ảnh vào với các pixel trong ảnh ra
Aliasing, hay còn gọi là răng cưa, xuất hiện khi kích thước ảnh bị giảm Khi giảm kích thước, số lượng pixel gốc được lấy mẫu giảm, dẫn đến việc tạo ra ít pixel hơn Hiện tượng này thường xuất hiện dưới dạng bậc thang, đặc biệt trong các ảnh có độ tương phản cao.
Antialiasing : Các biện pháp chống răng cưa cho ảnh
Sinh Viên: Nguyễn Trường Giang Page 20
Bicubic interpolation calculates the output pixel values by averaging the values of the surrounding 4x4 neighboring pixels, while bilinear interpolation determines the output pixel values based on the average of the 2x2 neighboring pixels.
Geometric operation : Một thao tác sửa đổi quan hệ hình học gữa các pixel trong một ảnh Chẳng hạn thay đổi kích thước ảnh, quay ảnh và xén ảnh
Interpolation : Quá trình được sử dụng để ước lượng giá trị ảnh ở một vị trí giữa các pixel
Nearest-neighbor interpolation : Các giá trị pixel ra được gán giá trị của pixel nằm trong một vùng gần pixel đó
Nội suy là quá trình ước lượng giá trị pixel tại vị trí giữa các pixel trong ảnh Khi thay đổi kích thước ảnh, số lượng pixel sẽ tăng lên so với ảnh gốc, và các công cụ như hàm imresize và imrotate sử dụng nội suy hai chiều để tính toán giá trị cho các pixel mới Ngoài ra, hàm improfile cũng áp dụng kỹ thuật nội suy để thực hiện các thao tác của mình.
Các phương pháp nội suy
- Toolbox sử lý ảnh cung cấp 3 cách nội suy hoá
+ Nội suy các pixel gần nhất ( nearest –neighbor interpolation )
+ Nội suy song tuyến tính ( Bilinear interpolation )
+ Nội suy song khối ( Bicubic interpolation )
Các phương pháp nội suy hoạt động tương tự nhau bằng cách xác định điểm trong ảnh mà pixel cần nội suy nằm tại đó Chúng gán giá trị cho các pixel xung quanh bằng cách tính toán giá trị trung bình có trọng số của các pixel lân cận, với trọng số được xác định dựa trên khoảng cách đến điểm đang xem xét.
- Các phương pháp này khác nhau ở tập các pixel mà chúng xem xét:
+ Với nội suy các pixel gần nhất: pixel ra được gán giá trị của các pixel ở gần nó nhất Các pixel khác không được xem xét
+ Nội suy song tuyến tính, giá trị của pixel ra là giá trị trung bình theo trọng số của 2x2 pixel lân cận
+ Nội suy song khối: giá trị của pixel ra là trung bình có trọng số của 4x4 pixel lân cận.
Số lượng pixel ảnh hưởng đến độ phức tạp tính toán, với phương pháp song tuyến tính tốn nhiều thời gian hơn phương pháp đầu tiên, và phương pháp song khối lại tốn thời gian hơn phương pháp song tuyến tính Mặc dù thời gian tính toán tăng lên, nhưng với số lượng pixel lớn hơn, độ chính xác sẽ được cải thiện.
Các hàm sử dụng tuyến tính cần một tham số để chỉ định phương pháp nội suy, trong đó phương pháp mặc định thường là nearest-neighbor interpolation Phương pháp này cho kết quả chấp nhận được cho hầu hết các ảnh và là lựa chọn duy nhất cho ảnh chỉ số Tuy nhiên, đối với ảnh cường độ hoặc RGB, chúng ta thường sử dụng phương pháp song tuyến tính hoặc song khối vì chúng mang lại kết quả tốt hơn.
Sinh Viên: Nguyễn Trường Giang Page 21
Với ảnh RGB, nội suy thường được thực hiện trên mặt phẳng R,B,G một cách riêng biệt
Nội suy trong ảnh nhị phân có ảnh hưởng rõ rệt đến chất lượng hình ảnh Khi áp dụng nội suy song tuyến tính hoặc song khối, giá trị pixel trong ảnh không chỉ đơn thuần là 0 hoặc 1 Mức độ ảnh hưởng đến kết quả hình ảnh phụ thuộc vào lớp của ảnh.
Nếu lớp ảnh đầu vào là double, thì ảnh đầu ra sẽ là một ảnh đen trắng cũng thuộc lớp double Ảnh đầu ra không phải là ảnh nhị phân vì nó chứa các giá trị khác 0 và 1.
Nếu ảnh đầu vào là uint8, ảnh đầu ra sẽ là ảnh nhị phân cũng thuộc lớp uint8, với giá trị pixel được làm tròn thành 0 hoặc 1 Khi áp dụng phương pháp nội suy nearest-neighbor, ảnh đầu ra luôn là ảnh nhị phân vì giá trị pixel được lấy trực tiếp từ ảnh đầu vào.
3.3 Thay đổi kích thước ảnh
- Để thay đổi kích thước của một ảnh, sử dụng hàm imresize Sử dụng hàm này ta có thể:
+ Chỉ ra kích thước của ảnh kết quả.
+ Chỉ ra phương pháp nội suy được sử dụng
+ Chỉ ra bộ lọc được sử dụng để ngăn ngừa hiện tượng răng cưa
Chỉ ra kích thước cho ảnh kết quả
Sử dụng hàm imresize, bạn có thể xác định kích thước của ảnh kết quả theo hai cách: một là chỉ định hệ số phóng đại áp dụng cho ảnh.
+ Bằng cách chỉ ra chiều của ảnh kết quả
Sử dụng hệ số phóng đại ảnh
Để mở rộng một ảnh, bạn cần chỉ định hệ số phóng đại lớn hơn 1, trong khi để thu nhỏ ảnh, hệ số phóng đại phải nằm giữa 0 và 1 Ví dụ, lệnh sau đây sẽ tăng kích thước của ảnh I lên 1.25 lần.
Sinh Viên: Nguyễn Trường Giang Page 22
Hình 3.1 Ảnh trước và sau khi imresize
Chỉ định kích thước của ảnh ra
Chúng ta có thể xác định kích thước của ảnh đầu ra bằng cách truyền một véc tơ chứa số lượng hàng và cột của ảnh cuối cùng Các lệnh dưới đây sẽ tạo ra một ảnh Y với 100 hàng.
Chú ý: Nếu kích thước được chỉ ra không có cùng tỉ lệ với ảnh vào, ảnh ra sẽ bị biến dạng
Chỉ định phương pháp nội suy được sử dụng
Hàm imresize theo mặc định sử dụng phương pháp nội suy các pixel gần nhất để tính giá trị pixel của ảnh Tuy nhiên, người dùng có thể chỉ định các phương pháp nội suy khác Dưới đây là bảng liệt kê các phương pháp nội suy được hỗ trợ, sắp xếp theo độ phức tạp.
‘nearest’ Nội suy các phixel gần nhất ( mặc định )
‘bilinear’ Nội suy song tuyến tính
‘biculic’ Nội suy song khối
Trong ví dụ sau, hàm imresize sử dụng phương pháp nội suy song tuyến tính:
Sử dụng bộ lọc để ngăn chặn hiện tượng răng cưa
Sinh Viên: Nguyễn Trường Giang Page 23
Giảm kích thước hình học của ảnh có thể gây ra hiện tượng răng cưa ở biên ảnh, do thông tin bị mất trong quá trình này Hậu quả là ảnh cuối cùng xuất hiện những gợn sóng không mong muốn.
Khi giảm kích thước ảnh bằng cách sử dụng nội suy song tuyến tính hoặc song khối, hàm imresize tự động áp dụng bộ lọc thông thấp để giảm thiểu hiện tượng răng cưa Người dùng có thể chỉ định kích thước của bộ lọc này hoặc lựa chọn một bộ lọc thay thế khác.