色弱如何识别色盲检测图

这难道不是一头鹿嘛?

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

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

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

借助工具识别色盲检测图

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

我又在网上搜到了有一些工具可以辅助,例如:色弱眼睛、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值