How to run the following function on GPU or make it Faster
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I have following MATLAB function It is very slow it takes so much time,it takes 5 seconds to run, but i want to run it in miliseconds,
Can anyone Help me running this code on GPU. I have also Attached the Dataset Below
[valueestimationimage ] = Parameterestimate(Batchdata)
fig=figure; set(fig,'visible','off');
h=histogram(Batchdata,10000,"BinMethod","sturges",'BinWidth',1,'BinLimits',[1 10000]);
sumofbins=max(h.Values);
% size_MP=round(10/100*sumofbins);
size_MP=round(10/100*sumofbins);
ValueofHistogram= h.Values;
Bindata=h.Data;
Binedges=h.BinEdges;
Binedges(end) = Inf;
deleted_data_idx = false(size(Bindata));
for i=1: length(ValueofHistogram)
if ValueofHistogram(i)<size_MP;
deleted_data_idx(Bindata >= Binedges(i) & Bindata < Binedges(i+1)) = true;
end
end
close(fig);
Bindata(deleted_data_idx) = [];
fig=figure; set(fig,'visible','off');
Freq_Data = Bindata;
h = histogram(Freq_Data, 10000, "BinMethod", "sturges", 'BinWidth', 1, 'BinLimits', [1 10000]);
[N, Edges, Bin] = histcounts(Freq_Data, 10000, "BinMethod", "sturges", 'BinWidth', 1, 'BinLimits', [1 10000]);
Retain = N > max(N) / 3.5;
% Find the bin indices that satisfy the condition
FindBins = find(Retain);
% Update RetainDataLv based on the valid bin indices
RetainDataLv = ismember(Bin, FindBins);
% Apply the logical indexing to retrieve the corresponding data
Bindata = Freq_Data(RetainDataLv);
close(fig);
Bindata=round(Bindata).';
[GC, GR] = groupcounts(Bindata) ;
countThresh =30 ; % change this untill you see that the data is fully denoised
denoisedData = Bindata(ismember(Bindata, GR(GC>countThresh))) ;
% incomingdata= denoisedData.';
if isempty(denoisedData)
incomingdata=Bindata.';
else
incomingdata=denoisedData.';
end
[row, column] = size(incomingdata);
for eachrow=1:row
if column>=1000
% buffered(eachrow,:) = buffer(incomingdata, 1000);
groupsize = 1000;
sig = incomingdata(:);
if isempty(sig)
error('signal is empty, cannot buffer it');
end
sigsize = numel(sig);
fullcopies = floor(groupsize ./ sigsize);
sig = repmat(sig, 1+fullcopies, 1);
sigsize = numel(sig);
leftover = mod(sigsize, groupsize);
if leftover ~= 0
sig = [sig; sig(1:groupsize-leftover)];
end
buffered = buffer(sig, groupsize);
else
targetsize = 1000;
sizeofincomingdata = column;
nrep = targetsize / sizeofincomingdata;
fullrep = floor(nrep);
leftover = targetsize - fullrep * sizeofincomingdata;
buffered=[repmat(incomingdata(eachrow,:), 1, fullrep), incomingdata(1:leftover)];
sig=buffered.';
end
end
signal=sig.';
[numImages, lenImage] = size( signal);
imbg = false(10000,lenImage); % background "color"
imfg = ~imbg(1,1); % forground "color"
imSizeOut=[10000 lenImage];
% ImageSize
for k= 1:numImages
imData = round( signal(k,:)); % get pattern
[~,Y] = meshgrid(1:lenImage,1:10000); % make a grid
% black and white image
BW = imbg;
BW(Y==imData)=imfg;
valueestimation=imbinarize(imresize(uint8(BW),imSizeOut));
% convert to uint8 (0 255)
valueestimationimage = im2uint8(valueestimation);
% resize (from 1000x1000)
SE=strel('disk',2);
BW=imdilate(BW,SE);
BW=imbinarize(imresize(uint8(BW),imSizeOut));
% convert to uint8 (0 255)
imoriginalestimate = im2uint8(BW);
end
end
0 comentarios
Respuestas (1)
Lakshya
el 19 de Jun. de 2023
Hi,
you can refer to this previous MATLAB answer
Also you can refer to this documentation
Hope this helps.
Ver también
Categorías
Más información sobre GPU Computing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!