Những điều cơ bản đầu tiên:
Phân đoạn Mean Shift là một kỹ thuật đồng nhất cục bộ rất hữu ích để giảm bớt sự khác biệt về tông màu hoặc đổ bóng trong các đối tượng được bản địa hóa. Một ví dụ tốt hơn nhiều từ:
Hành động: thay thế mỗi pixel bằng giá trị trung bình của các pixel trong vùng lân cận dải-r và có giá trị nằm trong khoảng cách d.
Mean Shift thường lấy 3 đầu vào:
- Một chức năng khoảng cách để đo khoảng cách giữa các pixel. Thường là khoảng cách Euclide, nhưng có thể sử dụng bất kỳ hàm khoảng cách xác định rõ nào khác. Các Manhattan Khỏang cách là một lựa chọn hữu ích đôi khi.
- Một bán kính. Tất cả các pixel trong bán kính này (được đo theo khoảng cách trên) sẽ được tính cho phép tính.
- Một sự khác biệt về giá trị. Từ tất cả các pixel bên trong bán kính r, chúng tôi sẽ chỉ lấy những pixel có giá trị nằm trong sự khác biệt này để tính giá trị trung bình
Xin lưu ý rằng thuật toán không được xác định rõ ràng ở các đường biên, vì vậy các cách triển khai khác nhau sẽ cho bạn các kết quả khác nhau ở đó.
Tôi sẽ KHÔNG thảo luận về các chi tiết toán học đẫm máu ở đây, vì chúng không thể hiển thị nếu không có ký hiệu toán học thích hợp, không có sẵn trong StackOverflow và cũng bởi vì chúng có thể được tìm thấy từ các nguồn tốt ở nơi khác .
Hãy nhìn vào tâm ma trận của bạn:
153 153 153 153
147 96 98 153
153 97 96 147
153 153 147 156
Với các lựa chọn hợp lý cho bán kính và khoảng cách, bốn pixel trung tâm sẽ nhận giá trị là 97 (giá trị trung bình của chúng) và sẽ khác với các pixel liền kề.
Hãy tính toán nó trong Mathematica . Thay vì hiển thị các con số thực tế, chúng tôi sẽ hiển thị mã màu, vì vậy, dễ hiểu hơn những gì đang xảy ra:
Mã màu cho ma trận của bạn là:
Sau đó, chúng tôi thực hiện một sự thay đổi trung bình hợp lý:
MeanShiftFilter[a, 3, 3]
Và chúng tôi nhận được:
Trong đó tất cả các phần tử trung tâm bằng nhau (đến 97, BTW).
Bạn có thể lặp lại nhiều lần với Mean Shift, cố gắng có được màu đồng nhất hơn. Sau một vài lần lặp lại, bạn sẽ đến một cấu hình không đẳng hướng ổn định:
Tại thời điểm này, rõ ràng là bạn không thể chọn số lượng "màu sắc" bạn nhận được sau khi áp dụng Mean Shift. Vì vậy, chúng ta hãy trình bày làm thế nào để làm điều đó, bởi vì đó là phần thứ hai của câu hỏi của bạn.
Những gì bạn cần để có thể đặt trước số lượng cụm đầu ra là một cái gì đó giống như Kmeans clustering .
Nó chạy theo cách này cho ma trận của bạn:
b = ClusteringComponents[a, 3]
{{1, 1, 1, 1, 1, 1, 1, 1},
{1, 2, 2, 3, 2, 3, 3, 1},
{1, 3, 3, 3, 3, 3, 3, 1},
{1, 3, 2, 1, 1, 3, 3, 1},
{1, 3, 3, 1, 1, 2, 3, 1},
{1, 3, 3, 2, 3, 3, 3, 1},
{1, 3, 3, 2, 2, 3, 3, 1},
{1, 1, 1, 1, 1, 1, 1, 1}}
Hoặc là:
Điều này rất giống với kết quả trước đây của chúng tôi, nhưng như bạn có thể thấy, bây giờ chúng tôi chỉ có ba mức đầu ra.
HTH!