除了每个像素循环判断过去,还有什么快一些的办法吗?
1 Jooooooooo 2022-08-31 16:56:42 +08:00 ![]() 纯色什么定义? |
![]() | 2 murmur 2022-08-31 17:02:26 +08:00 搜了一下,方法大多是使用 c 库缩放图片到小尺寸,比如 16*16 ,这样肯定有误差,但是总比对着几 k 分辨率图片遍历性能要好 |
![]() | 3 AoEiuV020CN 2022-08-31 17:06:16 +08:00 对计算机来说,没有比遍历更高效准确的了, 可以牺牲准确的话直接在遍历的时候选择性跳过一些就是了, |
![]() | 4 villivateur 2022-08-31 17:10:46 +08:00 如果是用通用 CPU 去计算,肯定只能遍历。 当然你可以想象其他办法,比如用 GPU 加速,或者用 FPGA 专门写个用于判断图片纯色的方案。 |
![]() | 6 ipwx 2022-08-31 17:30:22 +08:00 |
![]() | 7 jdhao 2022-08-31 17:33:33 +08:00 via Android ![]() 理论上不遍历,你不可能确定,另外需要考虑是否需要像素值完全一样,还是感官上一样,例如 (255,255,255) 和 (255, 254, 255) 是否一样? |
![]() | 8 paramagnetic 2022-08-31 17:41:30 +08:00 via iPhone 对图片做 FFT 然后检查是否只有 DC 分量( doge ) |
![]() | 9 LeegoYih 2022-08-31 17:58:57 +08:00 ![]() 1. 如果图片大部分不是纯色的,那么遍历是最快的 2. 允许小概率出现错误,采样就行,随机取 30%的像素点判断 3. 外包给印度人,肉眼判断 |
![]() | 10 cpstar 2022-08-31 18:09:12 +08:00 利用压缩?特别是摘要压缩? |
![]() | 11 xtreme1 2022-08-31 18:13:51 +08:00 @ipwx 这种大量小对象的情况就是 native 语言的核心阵地, java 多一个 12 bytes 的 header, 很多时候就决定了内循环能不能放进 L1. |
12 z1113456051 2022-08-31 18:14:19 +08:00 先按段或者求余分 n 组,比较每组的第 m 个都相同。 |
![]() | 13 murmur 2022-08-31 18:20:02 +08:00 |
![]() | 14 lakehylia &nsp;2022-08-31 18:23:19 +08:00 判断所有点是否聚集,不是用方差吗? |
![]() | 15 lakehylia 2022-08-31 18:29:40 +08:00 回忆了下,这不就是聚类算法嘛。。。 |
![]() | 16 wasd6267016 2022-08-31 18:49:22 +08:00 准确算法的话无论如何都要遍历吧 少读一个像素都不行 |
![]() | 17 XuHuan1025 2022-08-31 18:50:34 +08:00 .isBlank |
![]() | 18 TimePPT PRO 搞几百张你认为的纯色图片,直接训个二分类器就行。 |
19 fox0001 2022-08-31 23:55:55 +08:00 via Android 1 )图片都是位图吗?有没有矢量图? 2 )回复里都提到,纯色是怎样定义?要不要考虑色差范围? 3 )如果纯色的定义是每一个像素的颜色值都相同,那只能逐个像素遍历。正如 16 楼所言。 4 )文件处理,不是 Java 的强项。好像 stream 针对这种情况的遍历优化过,但也不会快太多。并发处理的话,理论上更快。这方面我缺乏经验,也不能给太多详细建议。 |
![]() | 20 TimPeake 2022-09-01 00:03:12 +08:00 随机取 N 次 个点坐标色值?如果相同则是纯色 哈哈 |
![]() | 21 icyalala 2022-09-01 00:08:02 +08:00 如果是位图,那无论如何都要遍历所有像素。上面说的什么缩小、压缩,同样也是遍历。 优化点无非是比如用 simd 加速一下,我觉得够快了。 如果是特定的压缩格式,比如 png 带调色板的,那直接根据压缩方式查一下肯定最快。 |
![]() | 22 pennai 2022-09-01 00:13:08 +08:00 压缩操作本身就需要遍历,抛开前置条件谈没有意义啊 |
23 jifengg 2022-09-01 09:02:47 +08:00 如果是要判断完全一致的纯色,个人觉得除了遍历没有其他办法了。 遍历的话,可以根据实际场景优化,比如从四个角往中心,或者反着来,就是尽早遇到不一样的颜色,退出遍历。 |
24 bibitiger 2022-09-01 16:10:51 +08:00 切片,多线程 比较换成位运算 当然你要是大多数都不是纯色的话,遍历应该最快 |
25 anonymous2351d00 2022-09-01 17:16:29 +08:00 这个我熟,拉取各大 java 去掉末位 a 的网站,对比车牌号就能识别是不是纯纯的色图[狗头]。 |