Giải thích Phân đoạn hình ảnh bằng Mean Shift


107

Bất cứ ai có thể vui lòng giúp tôi hiểu cách phân đoạn Mean Shift thực sự hoạt động như thế nào?

Đây là ma trận 8x8 mà tôi vừa tạo

  103  103  103  103  103  103  106  104   
  103  147  147  153  147  156  153  104   
  107  153  153  153  153  153  153  107   
  103  153  147  96   98   153  153  104   
  107  156  153  97   96   147  153  107   
  103  153  153  147  156  153  153  101   
  103  156  153  147  147  153  153  104   
  103  103  107  104  103  106  103  107

Sử dụng ma trận ở trên có thể giải thích cách phân đoạn Mean Shift sẽ tách 3 cấp số khác nhau không?


Ba cấp độ? Tôi thấy các con số khoảng 100 và khoảng 150.
John

2
Tôi nghĩ rằng các số ở giữa sẽ cách xa các số cạnh được bao gồm trong phần đó của ranh giới. Đó là lý do tại sao tôi nói 3. Tôi có thể sai vì tôi không thực sự hiểu cách hoạt động của loại phân tách này.
Sharpie

Ồ ... có lẽ chúng ta đang dùng các cấp có nghĩa là những điều khác nhau. Tất cả đều tốt. :)
John

1
Tôi thích câu trả lời được chấp nhận, nhưng tôi không nghĩ rằng nó đã hiển thị toàn bộ bức tranh. IMO pdf này giải thích phân đoạn dịch chuyển có nghĩa là tốt hơn (sử dụng không gian kích thước cao hơn như ví dụ là tốt hơn tôi nghĩ 2d). eecs.umich.edu/vision/teaching/EECS442_2012/lectures/...
Helin Wang

Câu trả lời:


204

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ừ:

nhập mô tả hình ảnh ở đây

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:

  1. 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.
  2. 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.
  3. 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à:

nhập mô tả hình ảnh ở đây

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:

nhập mô tả hình ảnh ở đây

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:

nhập mô tả hình ảnh ở đây

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à:

nhập mô tả hình ảnh ở đây

Đ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!


Có một Matlab triển khai Mean shift cho hình ảnh không?
Kaushik Acharya 17/10/11


164

Phân đoạn Mean-Shift hoạt động như sau:

Dữ liệu hình ảnh được chuyển đổi thành không gian đối tượng Không gian đặc trưng

Trong trường hợp của bạn, tất cả những gì bạn có là giá trị cường độ, vì vậy không gian đối tượng sẽ chỉ là một chiều. (Ví dụ: bạn có thể tính toán một số đặc điểm kết cấu và khi đó không gian đối tượng của bạn sẽ là hai chiều - và bạn sẽ phân đoạn dựa trên cường độ kết cấu)

Cửa sổ tìm kiếm được phân phối trên không gian tính năng nhập mô tả hình ảnh ở đây

Số lượng cửa sổ, kích thước cửa sổ và vị trí ban đầu là tùy ý đối với ví dụ này - một số thứ có thể được tinh chỉnh tùy thuộc vào các ứng dụng cụ thể

Lặp lại Mean-Shift:

1.) MEAN của các mẫu dữ liệu trong mỗi cửa sổ được tính nhập mô tả hình ảnh ở đây

2.) Các cửa sổ được CHIA SẺ đến các vị trí bằng với phương tiện được tính toán trước đó của chúng nhập mô tả hình ảnh ở đây

Các bước 1.) và 2.) được lặp lại cho đến khi hội tụ, tức là tất cả các cửa sổ đã ổn định ở vị trí cuối cùng nhập mô tả hình ảnh ở đây

Các cửa sổ kết thúc trên cùng một vị trí được hợp nhất nhập mô tả hình ảnh ở đây

Dữ liệu được nhóm theo các lần duyệt qua cửa sổ nhập mô tả hình ảnh ở đây

... ví dụ: tất cả dữ liệu được duyệt qua bởi các cửa sổ kết thúc tại, chẳng hạn, vị trí "2", sẽ tạo thành một cụm được liên kết với vị trí đó.

Vì vậy, sự phân đoạn này (ngẫu nhiên) sẽ tạo ra ba nhóm. Xem các nhóm đó ở định dạng hình ảnh gốc có thể trông giống như hình ảnh cuối cùng trong câu trả lời của belisarius . Việc chọn các kích thước cửa sổ và vị trí ban đầu khác nhau có thể tạo ra các kết quả khác nhau.


không gian đặc trưng không thể là ba chiều, tính toán vị trí của mỗi pixel?
Helin Wang

@HelinWang Có, nó có thể.
mlai

Tôi hiểu cách cửa sổ được định vị trong không gian đối tượng 1D, nhưng tôi không hiểu cách giải thích của bạn có thể áp dụng cho các thuật toán dịch chuyển nghĩa bao gồm khoảng cách tìm kiếm theo không gian (ví dụ: tính bằng pixel) và khoảng cách quang phổ (chênh lệch giá trị), chẳng hạn như trong câu trả lời của Tiến sĩ belisarius. Bạn có thể làm rõ điều này?
Lennert

@Lennert Nếu tôi hiểu chính xác câu hỏi của bạn, thì về cơ bản những gì bạn sẽ làm là thêm các vị trí pixel (x, y) làm đối tượng địa lý hoặc thêm các đối tượng địa lý khác dựa trên vị trí, vào không gian nhóm. Có vẻ như câu trả lời của Belisarius đề cập đến một cách triển khai cụ thể trong Mathematica có thể thực hiện điều gì đó phức tạp hơn một chút. cái đó có giúp ích không?
mlai

1
@Lennert Vâng, tôi nghĩ bạn đã hiểu. Tôi có thể hiểu tại sao bạn thấy câu trả lời của tôi khó hiểu. Tôi đã vẽ các 'cửa sổ' của mình dưới dạng hai chiều nhưng thực sự tôi đang cố gắng mô tả sự phân cụm chỉ trên các giá trị quang phổ một chiều. Sẽ khá tuyệt khi hình dung cụm dịch chuyển trung bình trong không gian đặc trưng ba chiều bằng hình vẽ hoặc hoạt ảnh (Có thể là một trong những ngày này nếu tôi có thời gian)
mlai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.