мне нужно, чтобы получить 1-D профиль кругового изображения, например, 256x256 греха (R) изображение профиль кругового изображения - более эффективный способ сделать это?
Я написал функцию MatLab для выполнения этой задачи, но это оказывается очень не эффективным , Функция усредняет по радиусным интервалам исходных изображений.
Профилировщик matlab показывает, что первая строка в контуре [indxs = find (...)] занимает ~ 86% от времени работы.
Мне нужно запустить функцию на нескольких тысячах имитированных изображений (несколько больше 256x256), и для завершения требуется очень много времени.
Кто-нибудь знает, как я могу сделать этот код быстрее? может быть, у кого-то есть другой, более эффективный способ выполнить задачу?
я также пытался преобразовать функцию в C++ & MEX файл с помощью MATLAB кодировщика , но это заняло больше времени (x3) для выполнения этой задачи, может быть потому, что суб-функции- «findC» использует некоторые 2D-БПФ в найдите центр изображения.
Спасибо вам все, Dudas
Моя функция Matlab:
function [sig R_axis Center]= Im2Polar (imR,ch,Center_Nblock)
% Converts Circular image to 1-D sig
% based on true image values w/o interpolation
% Input -
% imR - circular sinuns image
% ch - number of data-points in output signal (sig)
% Center_Nblock - a varible related to the image center finding method
% Output -
% sig - 1D vector of the circular image profile
% R_axis - axis data-points for sig
% Center - image center in pixels
[Mr Nr] = size(imR); % size of rectangular image
[Center]=findC(imR,Center_Nblock);
Xc=Center(1);
Yc=Center(2);
rMax=sqrt((Mr/2)^2 + (Nr/2)^2);
x=[0:1:Mr-1]-Xc+1;
y=[0:1:Nr-1]-Yc+1;
[X,Y]=meshgrid(x,y);
[TH,R] = cart2pol(X,Y);
% Assembling 1-D signal
sig=single([]);
ii=1;
dr=floor(rMax)/ch;
V=dr:dr:floor(rMax);
for v=V
indxs=find((v-dr)<=R & R<v);**
sig(ii)=mean(imR(indxs));
Nvals(ii)=length(indxs);
ii=ii+1;
end %for v
R_axis=V-dr/2;
end % of function
Ну, с одной стороны, вы можете просто удалить это 'find' и напрямую использовать логический индекс (заменив третью строку в цикле на' Nvals (ii) = sum (idxs) '). MATLAB часто подчеркивает 'find' в окне редактора и говорит вам, что он медленный. – wakjah
Было бы неплохо показать пример входных переменных и функцию «findC». – tashuhka
@ wakjah- Nvals не является частью алгоритма, это просто управляющая переменная, которая сообщает мне, сколько баллов было усреднено для каждого значения выходного сигнала. во всяком случае, Ive также попытался: 'sig1 (ii) = mean (imR ((v-dr) <= R & R
Dudas