python - 如何有效地识别 numpy 数组中的“类似 HSV-to-neightbours”像素?
问题描述
我的图像(np.array
形状[Y] [X] [RGB]
包含字形图形,形成类似 HSL 像素的区域。例如(放大):
我正在尝试识别文本的 HSL 值。
将所有像素扔到 scikit 中kmeans
可能会奏效,因为它会返回集群。
但是我需要效率。如果我可以首先将像素集限制为“具有 8 个相似 HSL 邻居的像素集”,这将显着提高性能。
就像是:
hsv = cv2.cvtColor(S, cv2.COLOR_RGB2HSV)
hues = hsv[:,:,0]
THRESH = 3
isclose = lambda hues_matrix_A, hues_matrix_B): \
np.abs(hues_matrix_B - hues_matrix_A) < THRESH
mask =
is_close(hues, np.roll(hues,-1, axis=0)) &
is_close(hues, np.roll(hues,+1, axis=0)) &
is_close(hues, np.roll(hues,-1, axis=1)) &
is_close(hues, np.roll(hues,+1, axis=1))
那就是上/下/左/右邻居,它已经很丑了。理想情况下,我也会对对角线邻居进行测试,但这将涉及 2-axis- roll
:
top_left_neighbour = np.roll(np.roll(hues,-1, axis=1),-1, axis=0)
哎呀。是否有适合这项工作的工具?界面可能如下所示:
mask = proximity_mask(src=hues_matrix, kernel=np.ones((3,3)), proximity=3)
如果没有,什么是智能建筑?
解决方案
从 numpy 1.20+ 你有slip_window_view:
# size will be 1-pixel less on each side
hue_nbhds = np.lib.stride_tricks.sliding_window_view(
hue, (3,3)
)
# reshape to 3D
hue_nbhds = hue_nbhds.reshape(*hue_nbhds.shape[:2], -1)
#
mask = (np.abs(hue_nbhds - hue[1:-1,1:-1, None]) < 3).all(-1)
但是你并没有真正从面具中得到太多:
推荐阅读
- php - 我收到奇怪的错误 Method Illuminate\Http\UploadedFile::backup 不存在
- c++ - 有没有办法可以在不清除所有内容的情况下使用 SDL_RenderClear() ?
- r - 删除日期早于特定日期 30 天的行
- javascript - 动态加载的 JS 需要像在 html 中一样可点击
- python - 从 SGML 中提取纯文本
- python - 在 PyQt5 中按下按钮时如何插入新的布局小部件
- python - 用 pandas 替换多个正则表达式
- java - Java 8 - 尝试使用文本时区 ID 解析时间戳
- associations - 续集关联
- c - 提取子数组