[Solved] How to detect peaks on gray background with Matlab FastPeakFind?


You are not using the function correctly.

your code is this (verbatim):

f = figure; 
hax = axes(f); 
af = figure('Name', 'Do Not Touch');

x = rand(1,100);
y = rand(1,100);
linewidth=1; 
plot(hax, x,y, 'LineWidth', linewidth); 

I = getframe(hax); 
I = I.cdata; 

The matrix I is not a matrix that contain peaks like the function is intended to have. This is how it looks like:

imagesc(I);

enter image description here

Even if all you had were single pixels, that is not what the function is supposed to have, as it is said that the peaks point spread function needs to be larger than some # of pixels, and that they are assumed to be sparse. The function has a demonstration on a sample image that works fine.

Also , it’s completely unclear what you even mean by peaks here.

EDIT:

Here’s an example of how to use the function. First let’s select random positions where we “create” the peaks:

I=rand(200)>0.9995;

This makes a binary matrix with only the points larger than 0.9995 selected (or having value 1). At each step you can imagesc(I) to see how I looks.

In real life, a camera will have some intensity in these points so we write:

I=I*100;

This is important as the peak by dentition needs to be a maximum value in its neighborhood. In real life, peaks are mostly not single pixels, they have some “width” or spread (this is also what the function says it deals with):

I=conv2(I,fspecial('gaussian',10,2),'same');

here, this spread is done by a “point-spread function” of a guassian of some width.

Lets add some 30% noise (note that after the last step the maximum value of the peaks is no longer 100, because it is spread to other pixels as well):

I=I+0.3*max(I(:))*rand(size(I));

Let’s find peaks

 p=FastPeakFind(I);

See how it did:

subplot(1,2,1);imagesc(I); 

subplot(1,2,2);imagesc(I); hold on
plot(p(1:2:end),p(2:2:end),'r+')

enter image description here

In the function code, the example is doing what I wrote here in a single line. Note that there is an edg parameter, as this will not work on peaks on the edges of the image. This cab be solved by padding the image with zeros I think…

10

solved How to detect peaks on gray background with Matlab FastPeakFind?