如何在二进制图像中找到峰

时间:2019-07-18 02:45:14

标签: matlab image-processing

我有这个二进制图像,我想使用findpeaks函数查找峰。enter image description here

我该怎么做。

1 个答案:

答案 0 :(得分:1)

您不能将findpeaks用于图像。

但是,您可以提取图像中绘制的数据,并在其上应用findpeaks。为了提取数据,我们首先设置阈值,以避免通过JPEG压缩在图像中引入非常低的灰度值。此阈值导致图像只有0和1的值。接下来,我们使用max在每列中找到包含1值的第一个索引。由于图像的原点位于左上角,而不是绘制的数据使用的左下角(我假设),因此我们将这些索引取反。

a = imread('https://i.stack.imgur.com/Q1f5L.jpg');
a = a > 30; % some suitable threshold -- JPEG compression makes this necessary
a(end,:) = 1;
[~,b] = max(a,[],1);
b = size(a,1) - b; % reverse, origin is on the bottom of the image
[c,d] = findpeaks(b);
plot(b)
hold on
plot(d,c,'o')
axis equal
xlim([0,size(a,2)])
ylim([0,size(a,1)])

plot of data in image, with local maxima highlighted