Я хотел бы, чтобы функция вычисляла следующую операцию:
Я сделал эту функцию, которая требует на входе матрицу и возвращает расстояния между каждыми двумя ее строками в другой матрице.
Определение RGB_dist_full:
function[D]=RGB_dist_full(x)
I = nchoosek(1:size(x,1),2);
D = RGB_dist(x(I(:,1),:), x(I(:,2),:));
squareform(D)
end
Определение RGB_dist:
function[distance]=RGB_dist(x,y)
distance=sqrt(sum((x-y).^2*[3;4;2],2));
end
Основная программа выглядит так:
clc
clear all
rgbImage = imread('peppers.png');
K=6;
N=uint64(K*2);
rgb_columns = reshape(rgbImage, [], 3);
[unique_colors, m, n] = unique(rgb_columns, 'rows','stable');
color_counts = accumarray(n, 1);
[max_count, idx] = max(color_counts);
Imgsize=size(rgbImage);
U=unique_colors(1:N,:)
size(U)
x=[62,29,64;
63,31,62;
65,29,60;
63,29,62;
63,31,62;];
RGB_dist_full(x);
RGB_dist_full(U);
Почему я получаю сообщение «Ошибка при использовании * MTIMES не полностью поддерживается для целочисленных классов. По крайней мере один вход должен быть скалярным. Чтобы поэлементно вычислить TIMES, используйте вместо этого TIMES (.*). для второго вызова функции, тогда как первый возвращает желаемый результат?
double(rgbImage)
и продолжай... - person bla   schedule 25.06.2014