Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image matlab寻找峰值图像_Image_Matlab_Image Processing_Binary Image - Fatal编程技术网

Image matlab寻找峰值图像

Image matlab寻找峰值图像,image,matlab,image-processing,binary-image,Image,Matlab,Image Processing,Binary Image,我有一个二进制图像如下: 这是一个随机抽象图片的图像,通过使用matlab,我想做的是检测,它有多少个峰值,这样我就知道其中大约有5个对象 如你所见,它有,5个峰,这意味着它有5个物体 我尝试过使用imregionalmax(),但我觉得它没有用,因为我的图像已经是二进制图像了。我还尝试使用regionprops('Area'),但它显示了错误的数字,因为每个对象之间没有精确的空格。提前谢谢你,因为它们是山峰,它们是垂直结构。所以在这个特殊的例子中,你可以使用(也称为):你让所有的黑色像素下降

我有一个二进制图像如下:

这是一个随机抽象图片的图像,通过使用matlab,我想做的是检测,它有多少个峰值,这样我就知道其中大约有5个对象

如你所见,它有,5个峰,这意味着它有5个物体


我尝试过使用
imregionalmax()
,但我觉得它没有用,因为我的图像已经是二进制图像了。我还尝试使用
regionprops('Area')
,但它显示了错误的数字,因为每个对象之间没有精确的空格。提前谢谢你,因为它们是山峰,它们是垂直结构。所以在这个特殊的例子中,你可以使用(也称为):你让所有的黑色像素下降,就像它们受到重力的影响一样。然后,您将在图像底部找到一条黑色像素曲线。然后你可以计算出峰值的数量

以下是算法:

  • 反转图像(黑色通常表示没有信息)
  • 关闭和打开,以清洁信号并获取信号
  • 您可以添加最大值检测以获取峰值的顶部

  • 一种简单的方法是对每一列的行进行求和,并使用以下方法找到结果的峰值。在下面的示例中,我选择使用图像的倒数,这将在列所在的位置产生正峰值

    rowSum = sum(1 - image, 1);
    
    如果我们画这个,它看起来像底部的图

    然后,我们可以使用
    findpeaks
    来识别此图中的峰值。我们将对其应用5点移动平均线,以帮助消除虚假峰值

    [peaks, locations, widths, prominences] = findpeaks(smooth(rowSum));
    
    然后,您可以通过基于这些输出中的任何一个进行阈值化来选择“真实”峰值。在这个例子中,我们可以使用
    突出部分
    并找到更突出的峰值

    isPeak = prominences > 50; 
    nPeaks = sum(isPeak)
    
       5
    
    然后我们可以画出峰的位置来确认

    plot(locations(isPeak), peaks(isPeak), 'r*');
    

    如果您对峰值的预期宽度有一些先验知识,则可以调整跨度以匹配此预期宽度,并在使用
    findpeaks
    时获得一些更干净的峰值

    使用图像的预期宽度40,
    findpeaks
    能够完美地检测到所有5个峰值,并且没有假阳性

    findpeaks(smooth(rowSum, 40));
    

    谢谢andvance,如果我知道的话,投影直方图的概念是什么?我已经添加了结果。投影柱状图的概念在我分享的前两个链接中进行了解释。顺便问一下,关闭和打开有什么意义?关闭和打开填补了小的空白,抹去了小的图案。在这种情况下,它会清除不同峰值的形状。你可以观察直方图投影和最终结果之间的差异。非常感谢soo muuch先生,现在我可以通过我的学士学位,非常感谢:')@fireticuse大米演示。它可能位于图像处理工具箱中。你可以先“计数”然后“蚀刻”再“计数”来去除“孤岛”。非常感谢你的解决方案,这对我帮助很大,Jazakallahu Khairan Katsira brotherhi,当我使用findpeaks()函数时,它说函数findpeaks()的输出参数太多了。当我把它转换成两个输出时,它工作了,但我不知道它是峰值、位置、宽度还是突出物。@BayuArasyi什么Matlab版本?2012 Matlab版本先生,我试图找出如何在没有任何阈值的情况下检测峰值,因为在预处理过程中已经有很多阈值。有什么办法吗?你知道如何像上面FiReTiTi兄弟解释的那样剪裁信号吗?2012 matlab版本,先生,我试图找出如何在没有任何阈值的情况下检测峰值,因为在预处理过程中已经有很多阈值。有什么办法吗?你知道如何像上面费雷提提兄弟解释的那样截取信号吗?