基于傅里叶描述子和HSV颜色特征的KNN水果类型识别,Matlab实现

        博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188

        个人主页:Matlab_ImagePro-CSDN博客

        原则:代码均由本人编写完成,非中介,提供有偿Matlab算法代码编程服务,不从事不违反涉及学术原则的事。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        本次分享的是基于傅里叶描述子和HSV颜色特征的KNN水果类型识别算法,用matlab实现。(有疑问或者想交流细节的QQ:3249726188

        一、案例背景介绍

         前期博主分享了傅里叶描述子、颜色特征、KNN分类等相关算法,前期博文链接如下:

        基于傅里叶描述子的手势动作识别(基于傅里叶描述子的手势动作识别,Matlab实现-CSDN博客

        基于Matlab的视频人体动作识别(基于Matlab的视频人体动作识别,Matlab实现-CSDN博客

        基于LBP和KNN的人面表情识别(基于LBP和KNN的人面表情识别,Matlab实现-CSDN博客

        matlab水果分拣系统(柑橘为例)(matlab水果分拣系统(柑橘为例)——matlab图像处理_基于图像处理的水果分拣机设计与仿真-CSDN博客

        这次分享的是水果类型识别算法。需求是识别不同种类的水果,这次我们图库案例选择了常见的苹果、香蕉、葡萄为例子,识别这三种类型水果。图库情况如下:

        二、算法原理概述

        针对图库的情况和特点,在算法选择上,特征方面,我们用颜色(HSV特征)和形状特征(傅里叶描述子)来结合识别,分类算法方面采用KNN分类算法。两个特征算法、KNN分类算法在前面博文中均有介绍过,这里不再细述了。

        整体原理是根据图库情况,先提取颜色特征,接着分割出水果二值图,提取图像的形状特征特征(傅里叶描述子算法),通过加权处理颜色和形状特征作为图像的特征值,然后通过与训练图库的特征进行对比,通过KNN算法进行分类。

        算法思路比较简单,下面介绍具体算法流程。

        三、算法流程

        1、读取待识别图像,并转换为HSV颜色模型,获取颜色特征

        2、通过傅里叶描述子算法,获取图像的形状特征

        3、根据步骤一、步骤二得到的特征,加权融合为图像特征值

        4、按照步骤一到三,获取整体训练图库的特征,保存为特征库

        5、根据待识别图特征值和训练库的特征值,使用KNN算法进行分类,得到识别结果。

        四、Matlab实现效果

      

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

专注、专一于Matlab图像处理学习、交流、代做

QQ:3249726188

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
归一化傅里叶描述 (Normalized Fourier Descriptor, NFD) 是图像处理中一种基于傅里叶变换的特征提取方法。 它可以用于目标识别和匹配等任务。 下面是利用 NFD 实现目标识别的一般步骤: 1. 对目标图像进行边缘检测,得到目标的轮廓。 2. 对轮廓进行采样,得到一组坐标点。这些坐标点可以用来表示目标的形状。 3. 对坐标点进行傅里叶变换,得到频域的系数。 4. 选择适当的频域系数,将其归一化,得到 NFD 特征。 5. 对待识别图像执行相同的步骤,提取 NFD 特征。 6. 利用模板匹配或者分类器等方法,对待识别图像的 NFD 特征与已知目标的 NFD 特征进行比较,从而实现目标识别。 Python中可以使用开源库`mahotas`中的`features`模块来实现 NFD 特征提取。具体实现步骤如下: ```python import mahotas import cv2 # 读入目标图像 img = cv2.imread('target.png') # 对图像进行边缘检测,得到轮廓 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) edged = cv2.Canny(gray, 30, 150) # 对轮廓进行采样,得到一组坐标点 contours, _ = cv2.findContours(edged, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) cnt = contours[0] x, y, w, h = cv2.boundingRect(cnt) cnt_norm = (cnt - [x, y]) / w # 对坐标点进行傅里叶变换,得到频域系数 nfd = mahotas.features.nfd(cnt_norm) # 对待识别图像执行相同的步骤,提取 NFD 特征 img_test = cv2.imread('test.png') gray_test = cv2.cvtColor(img_test, cv2.COLOR_BGR2GRAY) edged_test = cv2.Canny(gray_test, 30, 150) contours_test, _ = cv2.findContours(edged_test, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) cnt_test = contours_test[0] x_test, y_test, w_test, h_test = cv2.boundingRect(cnt_test) cnt_norm_test = (cnt_test - [x_test, y_test]) / w_test nfd_test = mahotas.features.nfd(cnt_norm_test) # 对待识别图像的 NFD 特征与已知目标的 NFD 特征进行比较,从而实现目标识别 match_score = mahotas.features.match_descriptors(nfd, nfd_test) ``` 在实际应用中,为了提高识别准确率,可能需要对 NFD 特征进行进一步处理,比如 PCA 降维或者 LDA 降维等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值