Làm cách nào để khớp hình elip với dữ liệu 2D


7

Tôi muốn tìm sự phù hợp "tốt nhất" của hình elip với các hình dạng liền kề, có thể lõm như:

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

Tôi đã thử những gì?

Tôi nghĩ rằng người ta có thể chỉ định hướng của trục chính và trục phụ của hình elip bằng cách ánh xạ các giá trị pixel vào tọa độ, có nghĩa là trừ và lưu hai hàm riêng lớn nhất từ ​​PCA. Dường như hoạt động khá tốt trong việc tìm hướng:a,b

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

Vấn đề của tôi là xác định độ dài của hai vectơ này. Hiện tại, tôi đã sử dụng , từ giá trị bản địa của PCA. Điều này dường như đánh giá thấp chiều dài. Làm cách nào để xác địnhvàhoặc cách khác, phù hợp nhất với một hình elip cho các hình dạng này?λ1 λ2|a||b|


Theo những gì tôi hiểu, các giá trị riêng đo lường 'sức mạnh' của bán kính quang phổ của người bản địa cụ thể đó. Tôi không có số bạn đang sử dụng, nhưng không và phù hợp hơn với độ dài thực tế? λ1λ2
Spacey

Bạn nói đúng về mối quan hệ của với sức mạnh của phép chiếu eigenvector - nhưng tôi không thể nghĩ ra bất cứ điều gì khác để sử dụng. Sử dụng trái ngược với các vectơ ra khỏi biểu đồ theo một số bậc độ lớn. Tôi chỉ đơn giản chọn làm dự đoán bắt đầu. λλλ
Móc vào

Vì chỉ có 2 chiều, vui lòng đăng các vectơ riêng mà bạn đã tìm thấy và các giá trị riêng tương ứng của chúng. Ngoài ra, các điểm tối đa / phút trên một trong hai cạnh của bản vẽ.
Spacey

Câu trả lời:


6

Theo dõi câu trả lời đã bị xóa của tôi ... Nếu bạn lấy một hình elip đầy và chiếu tất cả các điểm lên trục , nhiều điểm sẽ được chiếu gần gốc hơn so với cực trị, trong phân bố hình tròn. Không phải là phân phối gaussian và không phải là phân phối đồng nhất mà tôi đã đề cập trong tương tự 1-D trong câu trả lời bị xóa của tôi. Phân phối kết quả thực sự có pdf và từ đó bạn có thể tính toán độ lệch chuẩn là .xp(x)=(1(xr)2)r2

Do đó, nếu dữ liệu được phân bố đồng đều ở bên trong hình elip của bán kính (có trục là trục và ), độ lệch chuẩn của tọa độ là và của tọa độ là . Vì vậy, hệ số hiệu chỉnh bạn cần sử dụng chỉ đơn giản là 2.a,bxyxa2yb2

Dưới đây là một ví dụ hoạt động trong việc python phục hồi trung tâm (ma trận dịch), ma trận xoay và bán kính của một hình elip từ các điểm được lấy mẫu ngẫu nhiên từ bên trong của nó:

import numpy

# Generate some points distributed uniformely along an ellipse
x = 2 * (numpy.random.rand(10000, 1) - 0.5)
y = 2 * (numpy.random.rand(10000, 1) - 0.5)
d = (x / 0.5) ** 2 + (y / 0.25) ** 2
inside = numpy.where(d < 1)[0]
x = x[inside]
y = y[inside]
data = numpy.hstack((x, y)).T

# Now rotate by 0.5 rad and translate it to (4, -8)
angle = 0.5
rotation = numpy.array([
    [numpy.cos(0.4), -numpy.sin(0.4)],
    [numpy.sin(0.4), numpy.cos(0.4)]])

data = numpy.dot(rotation, data)
data[0, :] += 4
data[1, :] -= 8

# Step 1: center the data to get the translation vector.
print 'Translation', data.mean(axis=1)
data -= numpy.reshape(data.mean(axis=1), (2, 1))

# Step 2: perform PCA to find rotation matrix.
scatter = numpy.dot(data, data.T)
eigenvalues, transform = numpy.linalg.eig(scatter)
print 'Rotation matrix', transform

# Step 3: Rotate back the data and compute radii.
# You can also get the radii from smaller to bigger
# with 2 / numpy.sqrt(eigenvalues)
rotated = numpy.dot(numpy.linalg.inv(transform), data)
print 'Radii', 2 * rotated.std(axis=1)

1
+1 Bạn có muốn mở rộng về cách chính xác bạn đã tạo ra PDF không? Nó đi vào trung tâm của vấn đề. Cảm ơn. p(x)=1(xr)2
Spacey

Quy trình chuẩn để lấy phân phối biên 1-D dọc theo một trục từ phân phối 2-D (bạn tích hợp dọc theo trục khác). Tích phân sau đó là chiều dài của một phần của hình elip, trực giao với trục mà bạn chiếu.
pichenettes

3

Kiểm tra hình vuông nhỏ nhất trực tiếp Lắp hình elip của Fitzgftime et al. Đó là một vấn đề eigenvalue đơn giản, kích thước không tỷ lệ với số pixel trong mẫu của bạn! Bước duy nhất phụ thuộc vào số lượng pixel bạn ném vào đó là tính toán của ma trận phân tán, vẫn là .O(n)


Cảm ơn bạn đã tham khảo @pichenettes, nhưng bài báo đó không giống như những gì tôi đang cố gắng giải quyết (vui lòng sửa lại cho tôi nếu tôi sai). Trong bài báo, họ đang cố gắng giảm thiểu khoảng cách bình phương nhỏ nhất của một tập hợp các điểm đến đường cong của hình elip. Trong trường hợp của tôi, tôi có một khu vực mà tôi muốn xấp xỉ bằng một hình elip theo cách tốt nhất có thể.
Móc vào

À tôi hiểu rồi ... xin lỗi
pichenettes

Tuy nhiên, đây là một liên kết hữu ích, nhưng tôi đã tìm ra những bài báo tương tự khi tôi thực hiện tìm kiếm trên Google cho một hình elip phù hợp nhất. Rõ ràng vấn đề đó được xác định rõ!
Hooked

Nhưng bạn không thể lấy được đường viền của khu vực và áp dụng giấy @pichenettes cho nó?
Jean-Yves

Tôi nghĩ rằng có những trường hợp góc (hình dạng kỳ lạ?) Trong đó một hình elip phù hợp với đường viền sẽ không phù hợp với bề mặt.
pichenettes
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.