50 lines
1.9 KiB
Matlab
50 lines
1.9 KiB
Matlab
function [peakindex2D, peakval2D] = findpeak2D(data2D, th)
|
|
|
|
[Nrow, Ncol] = size(data2D);
|
|
|
|
peakindex2D = zeros(Nrow, Ncol);
|
|
peakval2D = zeros(Nrow, Ncol);
|
|
|
|
if isempty(th)
|
|
for rowidx = 1 : Nrow
|
|
for colidx = 1 : Ncol
|
|
indexset = [rowidx-1 colidx; rowidx+1 colidx; rowidx colidx-1; rowidx colidx+1];
|
|
det_indexset = (indexset(:,1) > 0) .* (indexset(:,1) < Nrow+1) .* (indexset(:,2) > 0) .* (indexset(:,2) < Ncol+1);
|
|
det_indexset = find(det_indexset > 0);
|
|
cond_peak = 0;
|
|
index_iter_len = length(det_indexset);
|
|
for indexset_idx = 1 : length(det_indexset)
|
|
if data2D(rowidx, colidx) >= data2D(indexset(det_indexset(indexset_idx),1), indexset(det_indexset(indexset_idx),2))
|
|
cond_peak = cond_peak + 1;
|
|
end
|
|
end
|
|
|
|
if cond_peak == index_iter_len
|
|
peakindex2D(rowidx, colidx) = 1;
|
|
peakval2D(rowidx, colidx) = data2D(rowidx, colidx);
|
|
end
|
|
end
|
|
end
|
|
else
|
|
for rowidx = 1 : Nrow
|
|
for colidx = 1 : Ncol
|
|
indexset = [rowidx-1 colidx; rowidx+1 colidx; rowidx colidx-1; rowidx colidx+1];
|
|
det_indexset = (indexset(:,1) > 0) .* (indexset(:,1) < Nrow+1) .* (indexset(:,2) > 0) .* (indexset(:,2) < Ncol+1);
|
|
det_indexset = find(det_indexset > 0);
|
|
cond_peak = 0;
|
|
index_iter_len = length(det_indexset);
|
|
for indexset_idx = 1 : length(det_indexset)
|
|
if data2D(rowidx, colidx) >= data2D(indexset(det_indexset(indexset_idx),1), indexset(det_indexset(indexset_idx),2))
|
|
cond_peak = cond_peak + 1;
|
|
end
|
|
end
|
|
|
|
if cond_peak == index_iter_len && data2D(rowidx, colidx) >= th
|
|
peakindex2D(rowidx, colidx) = 1;
|
|
peakval2D(rowidx, colidx) = data2D(rowidx, colidx);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
end |