KNN图像识别

该项目使用KNN算法进行图像识别,通过图像二值化、向量化处理,利用欧氏距离计算相似度。在MapReduce中进行处理,提取高相似度样本,识别结果存在误差,需要增加样本量和优化算法。
摘要由CSDN通过智能技术生成

KNN:

邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。
kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合。

本项目将图像进行二值化处理,将得到的数据转化成向量,形成训练数据集。再将待识别的图片二值化,利用欧氏距离求相似度,最相似的即为识别结果。

欧氏距离:

具体步骤:

1.把训练数据(已经识别的数据)二值化。

2.把第一步得到的数据转化成向量,形成训练数据集。

3.把待识别的图片二值化。

4.把二值化后类似矩阵的数据转化为向量。

5.把待识别数据向量和训练数据向量进行求相似度运算,利用欧氏距离。

6.选取最相似的K个,根据标签统计个数,且计算平均相似度。

材料准备:

待识别图像集合:数字0~9 每个数字取100张。

 

 

具体代码实施:

1.图像二值化

package KNN;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Arrays;

//
public class ImageDemo {
        public void arrayImage() throws IOException {
           for (int sum = 1; sum <=20; sum++) {
                File file = new File("D:\\idea\\BD1803_hadoop\\target\\test\\7_31.png");
                //读入20*20像素的图像
                BufferedImage image = ImageIO.read(file);

                File file1 = new File("D:\\idea\\BD1803_hadoop\\target\\test\\7.txt");
                FileWriter out = new FileWriter(file1);
                //转化为向量写入文件中
                int width = image.getWidth();
                int height = image.getHeight();

                for (int i = 0; i < height; i++) {
                    for (int j = 0; j < width; j++) {
                        int rgb = image.getRGB(i, j);
                        Color gray = new Color(105, 105, 105);
                        int rgb_gray = gray.getRGB();
                        if (rgb > rgb_gray) {
                            out.write("1");//颜色比灰色深设为1
                            out.flush();
                        } else {
                            out.write("0");//颜色比灰色浅设为0
                            
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值