You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优化面向色弱可访问性的图像蓝色程度评分算法:排除非蓝色像素并优先覆盖度的技术求助

面向色弱可访问性的图像蓝色程度评分算法:排除非蓝色像素并优先覆盖度的技术求助

我自己是色弱,最近在做一个面向色弱群体的可访问性项目——开发Python脚本根据「蓝色程度」给图像排名。我的核心需求是优先选择蓝色区域大的图像,而非只有小范围高饱和蓝色斑点的图像。但折腾了好久还是遇到了问题:灰色、白色这类完全没有蓝色的图像,居然因为蓝色通道的残留数值,评分比真正带蓝色的图像还高。

具体问题

我现在用「覆盖度+强度」的综合公式计算评分,但像image20.png这种完全没有蓝色的灰度图(像素值比如(100,100,100)),明明覆盖度是0%、强度25%,评分却排在有5%蓝色覆盖度的image127.png前面。

核心评分规则

我设定的评分逻辑是这样的:

  • 覆盖度:蓝色占主导且亮度足够的像素占总像素的百分比
  • 强度:仅针对符合条件的蓝色像素,计算其蓝色通道的平均值
  • 综合评分:0.9 * 覆盖度 + 0.1 * 强度——重点优先覆盖度

当前实现代码

from PIL import Image
import numpy as np

def average_blue_intensity(image_path):
    img = Image.open(image_path).convert('RGB')
    img_array = np.array(img).astype(np.int16)
    red, green, blue = img_array[:, :, 0], img_array[:, :, 1], img_array[:, :, 2]
    mask = (blue > red + 40) & (blue > green + 40) & (blue > 100)
    return np.mean(blue[mask]) / 255 if np.any(mask) else 0

def blue_coverage(image_path):
    # ... (和上面用的是同一个掩码逻辑)
    return np.mean(mask)

# 综合评分计算
combined_scores = {path: 0.9 * coverage + 0.1 * intensity ...}

我已经尝试过的调试方法

  • 收紧阈值:要求蓝色通道值必须比红、绿通道高40个单位,且蓝色值本身大于100
  • 像素级调试:确认image20.png确实没有符合条件的蓝色像素,全是灰度值接近的像素
  • 掩码可视化:生成调试图来验证掩码的准确性,确保没把非蓝色像素误判进去

诡异的输出结果

  • image20.png(无蓝色)的评分居然高于image127.png(5%蓝色覆盖)
  • 具体输出:
1. image20.png - Score: 0.0999 (Coverage: 0.00%, Intensity: 24.97%)  
2. image127.png - Score: 0.0964 (Coverage: 5.23%, Intensity: 16.26%)  

求助问题

请问怎么优化这个算法,才能彻底排除灰色、白色这类非蓝色像素,让评分真正反映图像的蓝色主导程度?

备注:内容来源于stack exchange,提问作者Dilubar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 08:23:04