Phương Pháp Morphology Cho Ảnh Xám
Khái niệm về ảnh xám
Một ảnh xám có thể được biểu diễn bởi một hàm không liên tục f(x,y), trong đó (x,y) thuộc tập Z x Z và f(x,y) thuộc R Hàm này thể hiện mức xám tại pixel có tọa độ (x, y), với giá trị mức xám là một số nguyên nếu f(x, y) thuộc Z.
Tương tự như trong ảnh nhị phân, ta cũng có khái niệm phần bù và phản xạ của một ảnh xám:
2 Phép Dilation cho ảnh xám
Những phép toán mà ta đã đề cập ở phần trên đều có thể áp dụng vào ảnh xám Tất nhiên ngoại trừ hiss - or - miss.
Ta nói f được phình bởi nhân (mặt nạ), kí hiệu f b được định nghĩa như sau :
Trong đó D và D , là miền giá trị của f và b Ta nên quan niệm f là một hàm hơn là một tập hợp.f b
Công thức trên còn có thể được định nghĩa theo một biến :
Lưu ý rằng miền giá trị D phụ thuộc vào nhân tạo ảnh được chọn Nếu tâm của nhân tạo ảnh nằm ở giữa, giá trị có thể là âm hoặc dương Hàm f (s – x) sẽ nằm bên phải khi s dương và ngược lại.
Phép toán được mô tả như sau: xem kết quả xoay 180 độ của mặt nạ ảnh, đặt tâm mặt nạ lên từng vị trí của ảnh f từ trên xuống dưới và từ trái qua phải Tại mỗi tọa độ trên ảnh, ta tìm tổng mức xám của f và b trong vùng mặt nạ Cuối cùng, mức xám tại tọa độ (x,y) của ảnh mới sẽ là giá trị lớn nhất (max) trong tất cả các giá trị vừa tính.
Vùng điều kiện (s − x)E D và x D được xác định bằng cách áp dụng mặt nạ lên vùng tương tác Những tọa độ nằm trong mặt nạ nhưng không thuộc vùng ảnh f sẽ được xem là không có giá trị và không được tính toán.
Trong phép toán phình ảnh, nếu mức xám (độ sáng) trong thành phần của ảnh b càng cao, tức là chứa nhiều giá trị dương, thì sau khi thực hiện phép phình, ảnh sẽ trở nên sáng hơn Đồng thời, các vùng tối trong ảnh sẽ bị thu nhỏ lại hoặc có thể hoàn toàn biến mất.
Hình 34: phình ảnh sử dụng nhân flat-top
Hình 35: phình ảnh với nhân tạo 3x3Nhận xét 2: là ảnh sáng lên và những vùng tối có kích thước nhỏ hơn nhân tạo ảnh bị xóa hoàn toàn.
Trong Matlab xử dụng hàm indilate(Imgray,b) với b là nhân tạo ảnh dùng cho phép phình.
Phép Erosion cho ảnh xám
Ta nói f được phình bởi nhân (mặt nạ), kí hiệu f b được định nghĩa như sau:
Df, và D , có vai trò tương tự như trong phép phình ảnh Giống như phép phình ảnh ta cũng cób thể mô tả công thức bởi hàm một biến:
Phép toán này mô tả quy trình sử dụng mặt nạ để xử lý ảnh, trong đó mặt nạ được phủ lên từng vị trí trên ảnh gốc Tại mỗi vị trí (x, y), chúng ta tính toán hiệu mức xám giữa ảnh f và mặt nạ b, chỉ xem xét các giá trị nằm trong vùng xác định Kết quả là tạo ra một ảnh mới, trong đó giá trị tại mỗi vị trí (x, y) được gán bằng giá trị nhỏ nhất trong vùng được xác định Lưu ý rằng các tọa độ nằm ngoài vùng tương tác sẽ không được tính trong quá trình này.
Ngược lại với phép phình, việc xử lý ảnh sẽ tạo ra bức ảnh tối hơn, đồng thời loại bỏ hoặc thu nhỏ các vùng sáng nhẹ Nếu kích thước của các vùng sáng nhỏ hơn kích thước của nhân tạo ảnh, những vùng sáng này sẽ hoàn toàn biến mất trong quá trình co ảnh.
Hình 36: co rút sử dụng nhân flat-top.
Trong Matlab: tương tự với phép phình, ta dùng hàm imerode(Imgray,b).
Phép Opening và Closing cho ảnh xám
Hình 37: co rút sử dụng nhân 3x3.
Cũng tương tự như trong ảnh nhị phân:
Phép Opening được mô tả bằng công thức: f b = (fb) b
Phép Opening và Closing trong hình học có thể được hiểu đơn giản qua việc hình f được biểu diễn trong không gian 3 chiều, với trục tọa độ y và mức xám tại mỗi pixel Hình f giống như một mặt, trong đó độ lồi lõm tại mỗi điểm phụ thuộc vào giá trị mức xám Ảnh b cũng có thể được mô phỏng tương tự như một quả bóng lăn tròn bên trong hoặc bên ngoài vật thể Cụ thể, phép Opening diễn ra khi ảnh b giống như một quả cầu lăn tròn bên dưới bức ảnh f, dẫn đến việc các vùng nhỏ với mức xám cao sẽ bị giảm giá trị mức xám.
Phép toán Closing có thể được hiểu như một quả cầu lăn tròn bên ngoài bức ảnh f, giúp làm mịn các vùng có kích thước nhỏ hơn quả cầu và nâng cao mức xám cho những khu vực có mức xám thấp.
Hình 39: minh họa phép toán Closing trên ảnh xám
Hình 40: Ảnh gốc, ảnh bên trái sau khi Opening, bên phải sau Closing.
Trong bức ảnh sau khi mở (Opening), các vùng có mức xám cao một cách bất thường so với xung quanh sẽ được điều chỉnh xuống gần mức xám của các vùng khác Ngược lại, trong bức ảnh sau khi đóng (Closing), những vùng có mức xám thấp một cách khác thường sẽ được nâng lên gần bằng mức xám của các vùng xung quanh.
Ta viết thân hàm cho Opening: function out = Opening (A,b)
%operator Opening out=imerode (A,b); out=imdilate (out,b); end
Ta viết thân hàm cho Closing: function out = Closing (A,b)
%operator Opening out-imdilate (A,b); out=imerode (out,b); end
Một số ứng dụng của morphology trên ảnh xám
Một ứng dụng đơn giản là làm mờ những ảnh bị nhiễu hạt nhỏ có mức xám chênh lệch so với vùng xung quanh, thông qua việc sử dụng hai phép toán Closing và Opening.
Hình 41: Từ trái sang phải, ảnh gốc nhiễu, sau khi Opening, sau khi Closing
Kết quả thu được còn tùy thuộc vào nhân tạo ảnh mà ta chọn Cách chọn nhân tạo ảnh thích hợp là dựa trên trực quan.
Hình 42: Làm trơn mờ ảnh Ứng dụng trong matlab: function out = mysmooth(A,b)
%operator Opening out=Opening (A,b); out Closing (out,b); end
Ta nói g là biến đổi Gradient của ảnh f, g được định nghĩa như sau:
Hình 43: Ảnh ban đầu và sau khi dùng phép biến đổi.
Kết quả từ phép biến đổi Gradient cho thấy phép phình ảnh làm mở rộng các vùng sáng, trong khi phép co rút ảnh làm cho các vùng tối mở rộng và vùng sáng hẹp lại Điều này dẫn đến việc tại các biên của vật thể, nơi có sự biến thiên đột ngột về mức xám, khi trừ ảnh kết quả của phép phình ảnh cho ảnh kết quả của phép co rút, các đường biên của vật thể sẽ được nổi bật Do đó, phép biến đổi Gradient có thể được sử dụng hiệu quả để trích biên trong ảnh xám.
Trong trường hợp này, việc lựa chọn nhân tạo ảnh với kích thước lớn và số lượng pixel có mức xám cao sẽ giúp làm rõ và tăng độ đậm của đường biên Ứng dụng trong MATLAB có thể được thực hiện qua hàm: function out = myGradient (A,b).
%Gradient straform out= (imdilate (A,b)-imerode (A,b)); end
Ta gọi h là biến đổi Top – hạt của một ảnh, người ta định nghĩa phép toán như sau:
Hình 44: Hình ban đầu, hình sử dụng nhân tạo ảnh 3x3 với mức xám cao
Nhận xét: Sau khi thực hiện phình ảnh, các khu vực có mức xám cao sẽ bị mất hoặc giảm đi Do đó, qua phép trừ và phép Opening, ta có thể thu được những vùng nổi bật trong bức ảnh Ứng dụng trong MATLAB: function out my TopHat (A,b).
% Top-Hat straform out=(A-(Openging (A,b)); end
5.4 Tách ảnh theo nội dung ảnh
Chúng ta có một bức ảnh và muốn tách nó thành nhiều vùng mà vẫn giữ nguyên các đối tượng trong ảnh Phương pháp dưới đây sẽ cung cấp một giải pháp hiệu quả cho vấn đề này.
Hình 45: Hình có nhiều hình tròn nhỏ Để tách thành hai vùng và giữ nguyên vẹn đổi tượng trong ảnh ta dùng thuật giải sau:
Bước đầu tiên, chúng ta cần nhận diện các hình tròn bên trái là những đối tượng nhiễu Để loại bỏ chúng, ta sử dụng phép Closing và chọn nhân tạo ảnh có kích thước lớn hơn các hình tròn này Việc xác định nhân tạo ảnh cũng được thực hiện dựa trên trực quan.
Bước 2: Sử dụng phép Opening để khoanh vùng các đối tượng hình tròn bên phải, chọn kích thước nhân tạo ảnh lớn hơn khoảng cách giữa các hình tròn Kết quả thu được sẽ là một vùng đầy đủ đã được fill, và kích thước nhân tạo ảnh được xác định bằng trực quan.
Sau khi phân biệt rõ hai vùng, bước tiếp theo là sử dụng phép biến đổi Gradient để lấy biên của chúng Cần lưu ý rằng ảnh phải sáng và đủ lớn để làm nổi bật vùng biên Ngoài ra, có thể áp dụng một số phép biến đổi đơn giản khác để làm nổi bật biên vùng, như minh họa trong hình sau.
Kết quả cuối cùng cho thấy các vùng sáng được thay thế vào vị trí các pixel trong ảnh gốc, tạo ra hai vùng riêng biệt như hình minh họa.
Phương pháp này cho phép thống kê các đối tượng với kích cỡ khác nhau bằng cách mở ảnh gốc kết hợp với một ảnh nhân tạo có kích thước tăng dần.
Trong hình ảnh bên, có nhiều loại kích thước của các đối tượng tròn, cụ thể là ba kích cỡ khác nhau Chúng ta sẽ tiến hành thống kê sự phân bổ của các đối tượng có kích thước tương tự.
Ta thực hiện phương pháp Opening với ảnh nhân tạo có kích thước tăng dần Trong phương pháp này, nên chuyển đổi ảnh nhân tạo thành dạng hình vuông hoặc hình tròn với kích thước tăng dần.
Hình 49: Hình sử dụng hàm imshow(Opening(a,ones(n)) với các tham số tăng 1 đơn vị từ 4 – 9.
Khi chuyển từ ma trận mở rộng 7x7 sang 8x8, hình ảnh có sự thay đổi rõ rệt, với nhiều hình tròn nhỏ kích thước 7x7 biến mất khi sử dụng ma trận 8x8 Sự biến thiên này cho thấy rằng việc hiểu rõ các bước sẽ giúp chúng ta nắm bắt được sự phân bổ của các đối tượng trong ảnh.
Hình 50 minh họa việc sử dụng hàm imshow(Opening(a,ones(n)) – Opening(a,ones(n+1))) với các tham số tăng dần từ 4 đến 8, cho thấy sự thay đổi trong mật độ phân bố của các đối tượng trên ảnh Công đoạn tiếp theo là số hóa các bức ảnh này, tức là đếm phân bổ của các đối tượng Chúng ta thiết lập một hàm tương tự như histogram, nhưng thay vì đếm mức độ xám, chúng ta sẽ đếm số lượng đối tượng có kích cỡ từ 1 đến n pixel, với n được xác định tùy theo kích thước của các đối tượng Dưới đây là hàm Matlab được sử dụng: function thongkephanbo(link).
X0=Opening(A,ones(i)); %Opening voi kích thuốc lớn dần theo i
X1=X1-X0; k=sum(X1); k=sum (k); if (k> maxx) maxx = k; end y(i)=k;
X1=X0; end bar (x,y); xlabel('Size (pixel)); ylabel('So Luong);
Dựa vào kết quả thống kê sự phân bổ trong Hình 52, số lượng các đối tượng có kích thước từ 7 đến 8 pixel là phổ biến nhất, trong khi đối tượng lớn nhất được ghi nhận có kích thước lên đến 64 pixel.