cuốn sách gpt4 ai đã làm

android — Sắp xếp nhãn của hình ảnh được phân đoạn theo km dựa trên ý nghĩa cụm

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 03:58:47 27 4
mua khóa gpt4 Nike

Tôi có một câu hỏi đơn giản nhưng rất thú vị. Như bạn đã biết, Kmeans có thể cho kết quả khác nhau sau mỗi lần chạy do các tâm cụm ban đầu ngẫu nhiên. Nhưng giả sử tôi biết rằng cụm 1 có giá trị trung bình nhỏ hơn cụm 2, cụm 2 có giá trị trung bình nhỏ hơn cụm 3, v.v. Tôi muốn tạo một thuật toán để đạt được phân cụm với giá trị trung bình nhỏ hơn và sau đó gán nó cho chỉ mục cụm nhỏ hơn.

Đây là mã Matlab của tôi. Nếu bạn có nhiều danh mục hơn hoặc cách tiếp cận rõ ràng hơn. xin vui lòng cho tôi lời khuyên

 %%K-trung bình
num_cluster=2;
nrows = size(Img_origin,1);
ncols = kích thước(Img_origen,2);
I_1D = định hình lại(Img_origin,nrows*ncols,1);
[cluster_idx mu]=kmeans(double(I_1D),num_cluster,'distance','sqEuclidean','Replicates',3);
cluster_label = định hình lại(cluster_idx,nrows,ncols);
%% Sắp xếp dựa trên mu
[mu_sort id_sort]=sắp xếp(mu);
idx=ô(1,num_cluster)
%% Lưu chỉ mục đơn hàng nếu mu
cho i=1:num_cluster
idx{i}=find(cluster_label==id_sort(i));
end
%% Sắp xếp nhãn cụm dựa trên mu
cho i=1:num_cluster
cluster_label(idx{i})=i;
end

câu trả lời hay nhất

Tôi không rõ lý do tại sao bạn muốn gắn nhãn lại các cụm dựa trên thứ tự của từng trọng tâm. Bạn có thể chỉ cần sử dụng đầu ra vectơ nhãn theo k-mean để tham chiếu cụm/trung tâm mà mỗi điểm thuộc về.

Tuy nhiên, ý tưởng ban đầu là bạn phải sắp xếp các trọng tâm là một ý tưởng hay. Phần cuối cùng của mã có vẻ không hiệu quả vì bạn đang lặp qua từng thẻ và gán lại nó. Một điều tôi có thể đề xuất là có một bảng tra cứu trong đó đầu vào là các nhãn gốc và đầu ra là các nhãn được sắp xếp lại dựa trên các trọng tâm được sắp xếp.

Nếu bạn muốn đi theo con đường này, bạn có thể sử dụng container.Mapchìa khóa dựa vào đâu loại Thứ tự sắp xếp của đầu ra sẽ cung cấp các nhãn và giá trị là nhãn được sắp xếp lại... tức là một vectơ từ 1 đến số lớp bạn có. Bạn cần phải làm điều này bởi vì loại Đầu ra thứ hai của cho bạn biết vị trí mỗi giá trị trong mảng ban đầu sẽ xuất hiện trong kết quả được sắp xếp, vì vậy bạn phải sử dụng cách sắp xếp này để thực hiện việc gắn nhãn lại một cách chính xác. Ngoài ra, tôi sẽ sử dụng sắp xếp chức năng trong MATLAB thay vì bản gốc loại. Nhân tiện, bạn đang làm việc đó, bạn đang làm việc độc lập trên từngCột/Biến Thực hiện sắp xếp, điều này sẽ cho sai trọng tâm. Điều này sẽ hoạt động đối với các hình ảnh thang độ xám trong đó bạn chỉ phải xem xét một tính năng, thang độ xám, nhưng nếu bạn vượt ra ngoài thang độ xám và có thể chuyển sang RGB hoặc bất kỳ không gian màu nào bạn muốn, hãy sử dụng raw loại sẽ cho bạn kết quả không chính xác. Bạn cần coi mỗi hàng là một điểm và sau đó sắp xếp các hàng cùng nhau.

Với mã của bạn, bạn sẽ làm một cái gì đó như thế này:

%%K-trung bình
num_cluster=2;
nrows = size(Img_origin,1);
ncols = kích thước(Img_origen,2);
I_1D = định hình lại(Img_origin,nrows*ncols,1);
[cluster_idx mu]=kmeans(double(I_1D),num_cluster,'distance','sqEuclidean','Replicates',3);

%% Sắp xếp dựa trên mu
[mu_sort id_sort]=sắp xếp(mu);

%// Tra cứu tạo mới
tra cứu = container.Map(id_sort, 1:size(mu_sort,1));

%// Dán nhãn lại cho vectơ
cluster_idx_sort = lookup.values(num2cell(cluster_idx));
cluster_idx_sort = [cluster_idx_sort{:}];

%//Định hình lại kích thước ảnh gốc
cluster_label = định hình lại(cluster_idx_sort,nrows,ncols);

Điều này sẽ giúp mã của bạn tăng tốc hơn một chút.


Để kiểm tra lại, tôi người quay phim.tif Đã thử tính năng này trên hình ảnh, đây là một phần của hộp công cụ xử lý hình ảnh. Chạy mã mang lại cho tôi các trung tâm cụm này:

>>mu

mu =

153.3484
23.7291

Khi tôi sắp xếp các cụm theo thứ tự tăng dần, đây là cách sắp xếp và trọng tâm tôi nhận được:

>> mu_sort

mu_sort =

23.7291
153.3484

>> id_sort

id_sort=

2
1

Vì vậy, điều này hoạt động như chúng ta mong đợi... Bây giờ nếu chúng ta hiển thị biểu đồ nhãn cụm ban đầu trước khi sắp xếp trọng tâm:

cluster_label = định hình lại (cluster_idx, nrows, ncols);
imshow(cluster_label,[]);

...chúng ta có được bức ảnh này:

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

Bây giờ nếu chúng ta chạy logic sắp xếp và hiển thị trọng tâm:

imshow(cluster_label, []);

...chúng ta có được bức ảnh này:

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

Đây là những gì tôi mong đợi. Bởi vì trọng tâm bị lật nên bóng đổ cũng bị lật.

Về thuật toán - sắp xếp nhãn của các hình ảnh được phân đoạn theo km dựa trên phương tiện phân cụm, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/32097758/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress