Для изображения I и двух матриц m_1; m_2 (такого же размера с I). Функция f определяется как: Потому что мой дизайн цели хочет получить знак f. Следовательно, функция F может переписать следующим образом: Самый быстрый способ найти знак разного квадрата
- Я думаю, что вторая формула быстрее, чем первая формула, потому что: Он может игнорировать квадратный термин
- Он может вычислить знак непосредственно, вместо двух шаги в первом уравнении: вычислите знак f и check.
Вы согласны со мной? Есть ли у вас еще быстрее формулы для F
I =[16 23 11 42 10
11 21 22 24 30
16 22 154 155 156
25 28 145 151 156
11 38 147 144 153];
m1 =[0 0 0 0 0
0 0 22 11 0
0 23 34 56 0
0 56 0 0 0
0 11 0 0 0];
m2 =[0 0 0 0 0
0 0 12 11 0
0 22 111 156 0
0 32 0 0 0
0 12 0 0 0];
вывод е является
f =[1 1 1 1 1
1 1 -1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1]
Я осуществил первый путь, но я не закончил второй путь по MATLAB. Не могли бы вы проверить, пожалуйста, второй способ и сравнить его?
UPDATE: Я хотел бы добавить код chepyle и Divakar, чтобы задать вопрос. Обратите внимание, что оба они дают тот же результат, как и выше е
function compare()
I =[16 23 11 42 10
11 21 22 24 30
16 22 154 155 156
25 28 145 151 156
11 38 147 144 153];
m1 =[0 0 0 0 0
0 0 22 11 0
0 23 34 56 0
0 56 0 0 0
0 11 0 0 0];
m2 =[0 0 0 0 0
0 0 12 11 0
0 22 111 156 0
0 32 0 0 0
0 12 0 0 0];
function f=first_way()
f=sign((I-m1).^2-(I-m2).^2);
f(f==0)=1;
end
function f= second_way()
f = double(abs(I-m1) >= abs(I-m2));
f(f==0) = -1;
end
function f= third_way()
v1=abs(I-m1);
v2=abs(I-m2);
f= int8(v1>v2) + -1*int8(v1<v2); % need to convert to int from logical
f(f==0) = 1;
end
disp(['First way : ' num2str(timeit(@first_way))])
disp(['Second way: ' num2str(timeit(@second_way))])
disp(['Third way : ' num2str(timeit(@third_way))])
end
First way : 1.2897e-05 Second way: 1.9381e-05 Third way : 2.0077e-05
Я не думаю, что ваша вторая формула верна, так как квадратные условия изменит знак 'v_i (х, у) '- если вы не знаете,' I> = m_i' или что-то в этом роде. – aganders3
Что именно вы ищете? Первое уравнение или второе уравнение, которое когерентно с названием вопроса, но не совпадает с первым уравнением? – Divakar
@Divakar и angdaers3: Извините, я ошибаюсь во втором уравнении. Я обновляю его. Позвольте проверить его снова. Моя цель - проверить знак уравнения f в уравнении 1 самым быстрым способом.Потому что мы рассматриваем только знак f без его реального значения, следовательно, мы можем переформулировать, чтобы быстро вычислить время. – john2182