안녕하세요, 저는 Matlab을 사용하여 빠른 방법으로 작업하고 있습니다. 이것은 내 코드 FAST Detector의 이론입니다. 나는 내 코드가 비효율적이며 배열 부분과 루프에서 충분히 좋지 않다는 것을 안다. 이것은 내 코드입니다 :원형 배열을 가진 고속 검출기가 너무 느리게 작동합니다. Matlab (편집 : circshift 제거)
편집 : 나는 코드가 5 분 더 오랫동안 실행되기 때문에 circshift()
을 제거합니다. 나는 (@Oleg가 제안한대로 pos
을 사용하여)이 코드를 사용해 보았고, 여전히 느린 속도로 실행 중이었다. 약 1 분 정도 걸린다.
clc
clear all
close all
[file path]=uigetfile('*.jpg','Select Input');
im=imread([path file]);
gray=rgb2gray(im);
% function [bestpoint, sortedR] = FASTdetector2(gray)
[r c] = size(gray);
thres = std(double(gray(:)));
% thres = 50;
C = [];
for b = 19:r-19
for k = 19:c-19
p = gray(b,k);
p1 = gray(b-3,k);
p2 = gray(b-3,k+1);
p3 = gray(b-2,k+2);
p4 = gray(b-1,k+3);
p5 = gray(b,k+3);
p6 = gray(b+1,k+3);
p7 = gray(b+2,k+2);
p8 = gray(b+3,k+1);
p9 = gray(b+3,k);
p10 = gray(b+3,k-1);
p11 = gray(b+2,k-2);
p12 = gray(b+1,k-3);
p13 = gray(b,k-3);
p14 = gray(b+1,k-3);
p15 = gray(b+2,k-2);
p16 = gray(b+3,k-1);
arrayK = [p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16];
pos = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8];
plus = p + thres;
min = p - thres;
count = 0;
Ar = size(arrayK,2);
for i = 1:Ar+8
if arrayK(pos(i)) > plus
count = count + 1;
if count >= 9
C = [C; [b k]];
break
end
else
count = 0;
continue
end
end
for i = 1:Ar+8
if arrayK(pos(i)) < min
count = count + 1;
if count >= 9
C = [C; [b k]];
break
end
else
count = 0;
continue
end
end
end
end
x = C(:,1);
y = C(:,2);
R = HarrisMeasure(x,y);
absR = abs(R);
[val, index] = sort(absR,'descend');
sortedC = C(index,:);
Nindex = size(x,1);
if Nindex < 50
bestpoint = sortedC(1:Nindex,:);
sortedR = val(1:Nindex);
else
bestpoint = sortedC(1:50,:);
sortedR = val(1:50);
end
imshow(gray); hold on
plot(bestpoint(:,2),bestpoint(:,1),'r*')
% end
이 코드는 각 이미지에 대한 약 5 분 간격으로 운행 :(사람이 대체 코드를 도와 아니면 P1의 코드 단락 수 -? 배열로 P16 부분을
이사람이 알고 않았다 부품 코드 실행이 느린 무엇입니까?
당신을 감사합니다 여러분.
바로 'C'(Mlint가 이미 경고 한 것)가되어 코드가 비효율적입니다. 사전 할당을 고려하십시오. 또한, 달성하고자하는 바가 없으면 코드를 리팩터링하기가 어렵습니다. 말로 설명하십시오. – Oleg
[this] (http://www.edwardrosten.com/work/fast.html) 웹 페이지의 코드를 참조하십시오. –
@OlegKomarov 나는 단지 mlint가 코드 XD를 확인하기 위해 존재한다는 것을 알고 있기 때문에'C'만으로 느린 코드를 의미합니까? 내가 성취하고자하는 것은이 코드를 더 빨리 만드는 것입니다. 왜냐하면 솔직히 말해서 어떤 코드가 실행 속도가 느려지는지 알지 못하기 때문입니다. 내 기대는 반복되고있다. C (좌표)를 저장하는 다른 방법이 있습니까? @ ParagS.Chandakkar 예, 저 웹 페이지를 참조하십시오 :) – mumir