色弱如何识别色盲检测图

这难道不是一头鹿嘛?

先看看一张经典老图吧:这难道不是一头鹿嘛?
在这里插入图片描述
但是正常人看到的是一头牛,为什么会有这样的差别呢?

不知道大家是否有和我一样的困扰,能看清辨别日常生活中的红橙黄绿蓝青紫,但是体检色盲检测图就是看不清或者看到的和别人看到的不一样,高中体检、大学体检、驾照体检,成绩和技术都过关了,就因为色盲检查卡关,心里可太难受了。

因为咱们色弱视觉上对颜色类型不那么敏感,反而对颜色暗亮敏感。上面这张图的鹿头是偏亮的红色、身体和前腿是偏亮的蓝色绿色、后腿是偏亮的红色,所以我们会觉得他是一头鹿,但却是不同颜色组成。

借助工具识别色盲检测图

一次驾照体检,我为了解决色盲检测这个老大难的问题,一开始想的办法就是:把所有的图都背下来,背了小半天实在记不住,就放弃了。

我又在网上搜到了有一些工具可以辅助,例如:色弱眼睛、windows系统的颜色滤镜。我体验了一下windows颜色滤镜,确实有效果。
在这里插入图片描述
现在再重新查看图片,我也能识别出来是一头牛了。
在这里插入图片描述
但是windows的颜色滤镜有很多识别不了的图,例如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自研程序辅助识别

自己动手写一套识别程序吧。每一张图片都是由n*m个点组成,每个点都有自己的rgb颜色,根据这些信息定义自己识别到的颜色。

public enum MyColorEnum {
    //基础三色:红绿蓝
    RED(new Color(255, 0, 0), BaseColorType.RED),
    GREEN(new Color(0, 255, 0), BaseColorType.GREEN),
    BLUE(new Color(0, 0, 255), BaseColorType.BLUE),
    //混合三色: 黄、紫、青
    YELLOW(new Color(255, 255, 0), BaseColorType.GREEN),
    PURPLE(new Color(255, 0, 255), BaseColorType.RED),
    CYAN(new Color(0, 255, 255), BaseColorType.GREEN),
    //变种六色:橙(黄红)、粉红(紫红)、紫蓝、青蓝、青绿、黄绿
    ORANGE(new Color(255, 140, 0), BaseColorType.RED),
    PINK(new Color(255, 0, 140), BaseColorType.RED),
    PURPLE_BLUE(new Color(140, 0, 255), BaseColorType.RED),
    CYAN_BLUE(new Color(0, 140, 255), BaseColorType.BLUE),
    CYAN_GREEN(new Color(0, 255, 140), BaseColorType.GREEN),
    YELLOW_GREEN(new Color(140, 255, 0), BaseColorType.GREEN),
    //灰色
    GREY(new Color(140, 140, 140), BaseColorType.NONE),
    ;

    private final Color color;
    private final BaseColorType type;
}

颜色识别算法:

    private MyColorEnum getMyColorEnum(Color color) {
        int red = color.getRed();
        int green = color.getGreen();
        int blue = color.getBlue();
        List<Integer> ns = Stream.of(red, green, blue).sorted().collect(Collectors.toList());
        int maxN = ns.get(2);
        int midN = ns.get(1);
        int minN = ns.get(0);

        //1. 是否是灰色: 三色较为接近,最大差值小于10,灰色
        int d3 = maxN - minN;
        if (d3 < 10) {
            return MyColorEnum.GREY;
        }

        //2. 红绿蓝:最大色-第二大色>第二色-第三色
        int d1 = maxN - midN;
        int d2 = midN - minN;
        if (d1 * brightnessColorFactor.getBaseFactor(red, green, blue) > d2) {
            return maxN == red ? MyColorEnum.RED : maxN == green ? MyColorEnum.GREEN : MyColorEnum.BLUE;
        }

        //3. 黄青紫:黄色缺蓝,青色缺红,紫色缺绿;第二色-第三色 > 系数 * (第一色-第二色)
        if (d2 > brightnessColorFactor.getMixFactor(red, green, blue) * d1) {
            return minN == red ? MyColorEnum.CYAN : minN == green ? MyColorEnum.PURPLE : MyColorEnum.YELLOW;
        }

        //4. 青绿、黄绿、橙色、紫红、紫蓝、青蓝:取前两色,红色+绿色=橙色,绿色+红色=黄绿,红色+蓝色=紫红,蓝色+红色=紫蓝,蓝色+绿色=绿蓝,绿色+蓝色=青绿
        if (maxN == red) {
            return midN == green ? MyColorEnum.ORANGE : MyColorEnum.PINK;
        }
        if (maxN == green) {
            return midN == red ? MyColorEnum.YELLOW_GREEN : MyColorEnum.CYAN_GREEN;
        }
        return midN == red ? MyColorEnum.PURPLE_BLUE : MyColorEnum.CYAN_BLUE;
    }

识别到的效果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

驾照体检时,如何通过逻辑推理识别图片

  1. 先识别图片的主题颜色,也就是背景色,图片中处于边缘地带颜色最多的就是背景色。
  2. 选择数字颜色,技巧:红色是主题色,黄绿色、绿色、青色、蓝色就是数字的颜色;绿色是主题色,红色、粉红、红褐色、紫色、橙色就是数字的颜色。
  3. 从左至右,找选定的数字颜色块,根据选定的颜色走向挨着识别,大胆猜测,排除法论证:例如:根据颜色线条,猜测一个数字是8,如果缺了左下角,就是9,缺了右上角是6,缺了中间是0,缺了左上右下就是2

例子1:
在这里插入图片描述

  • 上边、下边、左边、右边有很多的绿色,还有一些黑绿色(黑绿色虽然无法第一时间看出来),且没有红色,那这张图就是绿色主题。
  • 主题色是绿色,那数字的颜色就是红色、深红色、红褐色
  • 从左至右查找,找到第一个数字有点像8,猜测是8,再按照顺序每块颜色笔画验证,如下图:
    在这里插入图片描述
  • 继续从左至右,找到第二个红色块,如下图。猜测可能得数字2、8、0。按照线条红色块挨个查找,不难笔画出来是2。
    在这里插入图片描述
    在这里插入图片描述
  • 继续从左至右,找到第三个数字的红色块,如下图。猜测数字0、8、2。按照线条红色块挨个查找出来是0。
    在这里插入图片描述
    在这里插入图片描述
  • 最终得到的结果就是 820

例子2:
在这里插入图片描述

  • 上边、下边、左边、右边都是红、橙色,且没有绿色,这张图就是红色主题。
  • 选定的数字颜色是:绿色、黄绿色、黄色
  • 从左至右,挨个查找。如下图所示:
    在这里插入图片描述

所有色盲检测图片以及识别结果资源下载

https://download.csdn.net/download/m0_37681914/89013169?spm=1001.2014.3001.5503

图片识别自研程序源码下载

https://download.csdn.net/download/m0_37681914/89013185?spm=1001.2014.3001.5503

  • 29
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 色盲是一种常见的视觉缺陷,影响了很多人的日常生活。为了帮助人们及时了解自己是否色盲,我们可以使用C语言来实现一个简单的色盲检测系统。 首先,我们需要收集一些色盲测试片,这些片上会有一些特定的案和颜色组合,可以帮助识别色盲。在程序中,我们可以将这些片存储为二维数组,每个像素点代表一个颜色。 接下来,我们需要实现一个功能,让用户输入自己看到的颜色,并进行判断是否为色盲。我们可以使用C语言中的控制语句和条件语句来实现该功能。通过遍历片的像素点,将用户输入的颜色与片中的颜色进行对比,判断用户是否识别正确。 为了提高判断的准确性,我们还可以引入一些色盲检测算法,比如色弱模拟算法。该算法可以将正常人识别的颜色转换为色盲人可以辨别的颜色,从而帮助色盲人更好地认识自己的视觉情况。 最后,我们可以根据用户的回答,输出一个结果,告诉用户是否为色盲。这个结果可以用文字描述,也可以用形化界面显示,更加直观地展示给用户。 通过以上的步骤,我们可以实现一个简单的色盲检测系统。用户可以通过该系统来了解自己是否色盲,并及时采取相应的措施,提高生活质量。当然,为了更加准确地进行色盲检测,我们还可以引入更多的色盲测试方法和算法,众多的研究和验证,以提供更准确的结果。 ### 回答2: 要实现色盲检测系统,可以使用C语言结合图像处理技术来实现。 首先,需要使用C语言读取和处理像。可以使用C语言中的图像处理库,如OpenCV,来读取像文件,并对像进行处理。通过读取每个像素的RGB值,可以获取像的颜色信息。 接下来,要实现色盲检测,可以使用颜色转换算法来将RGB颜色空间转换为其他颜色空间,如Lab颜色空间或HSV颜色空间。这些颜色空间将颜色信息分成不同的分量,使得检测色盲更加容易。 在转换为其他颜色空间后,可以通过计算颜色分量之间的差异来判断是否存在色盲。例如,对于红绿色盲,可以通过比较红色和绿色分量的值来判断。如果两者相差较小,就可能存在色盲。 最后,可以根据色盲检测的结果,给出相应的提示或建议,以帮助色盲者更好地区分颜色。可以使用C语言的控制语句和输出函数,如if语句和printf函数,根据检测结果输出相应的信息。 总之,要实现色盲检测系统,需要用C语言读取和处理像,通过颜色转换算法转换颜色空间,并通过计算颜色分量之间的差异来判断是否存在色盲。最后,根据检测结果输出相应的提示或建议。这样就可以用C语言实现一个简单的色盲检测系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值