Tôi cần lấy Trung tâm khối lượng (Centroid) cho các thành phần trong tập hợp các hình ảnh nhị phân có độ chính xác subpixel.Kết quả ComponentMeasurements [_, "Centroid"] offset
Mathematica 8 đi kèm với một bổ sung tốt đẹp:
i = [email protected]"http://i.stack.imgur.com/2pxrN.png";
m1 = ComponentMeasurements[MorphologicalComponents[i], "Centroid"] /.
Rule[_, x_] -> x
(*
-> {{403.229, 453.551}, {660.404, 371.383}, {114.389, 434.646}, {295.5, 206.}}
*)
Nhưng tôi đã trải qua một số khó khăn khi những kết quả cho thấy một số mâu thuẫn với các tính toán khác được thực hiện ở nơi khác.
Vì vậy, tôi cuộn của riêng tôi, có lẽ không đẹp:
i = [email protected]"http://i.stack.imgur.com/2pxrN.png";
f[i_] := [email protected]{#[[2]], ImageDimensions[i][[2]] - #[[1]]} & /@
(Mean /@
Function[x, Map[
Position[x, #, 2] &,
Complement[[email protected][x], {0}]]]
[MorphologicalComponents[i]]);
f[i]
Show[i, Graphics[{Red, Disk[#, 10] & /@ f[i]}]]
(*
-> {{403.729, 453.051}, {660.904, 370.883}, {114.889, 434.146}, {296., 205.5}}
*)
Bạn có thể thấy rằng có một .5 bù đắp giữa các kết quả này:
Thread[Subtract[m1, f[i]]]
(*
-> {{-0.5, -0.5, -0.5, -0.5}, {0.5, 0.5, 0.5, 0.5}}
*)
Tại tôi lần đầu tiên nghĩ rằng vấn đề có liên quan với kích thước hình ảnh thậm chí là lẻ hoặc lẻ, nhưng đó không phải là trường hợp.
Tôi muốn sử dụng ComponentMeasurements[ ..,"Centroid"]
và sửa kết quả, nhưng tôi e ngại các phiên bản Mma trong tương lai có thể sửa đổi hành vi này và làm hỏng kết quả.
Tôi cũng có thể chạy "hiệu chỉnh" trước đó với hình ảnh đã biết và tính toán độ lệch, vì vậy nó sẽ tự động sửa, nhưng tôi muốn hiểu điều gì đang diễn ra trước.
Đây có phải là lỗi không?
Bất kỳ ý tưởng nào về việc tại sao điều này lại xảy ra?
tôi đoán điều này có thể liên quan đến quy ước nơi các trung tâm pixel được đặt tương ứng với lưới tọa độ. Nếu một thuật toán giả định lưới tọa độ được liên kết với các ranh giới pixel và phương thức kia giả định lưới được căn chỉnh với các pixel-center bạn sẽ nhận được các kết quả không phù hợp. –