gpt4 book ai didi

java - 如何检测图像是否像素化

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:45:56 30 4
gpt4 key购买 nike

之前在 SO 上有这样一个问题:Detecting a pixelated image in python还有quora

我正在尝试确定是否可以将用户上传的图像检测为“像素化”。像素化是指图像 like these :就我而言,我无权访问原始(非像素化)版本。

我的方法:

不确定这种方法的效果如何,但如果我可以获得图像中每个像素的 RGB,然后将其与其相邻像素进行比较以查看它们是否相似,那么我可以检测到图像像素化了吗?我可以获得像素的 RGB,但不知道如何将它们与邻居进行比较。

是否已经有可用的算法来执行此类操作?我可以采取其他一些方法吗?我不受任何特定语言的约束。

最佳答案

这里有一个相当简单的可行方法:

  1. 从在 x 和 y 方向均平移 1 个像素的副本中减去图像。
  2. 对列和行中的像素求和(我只显示下面的列)。
  3. 计算出峰值位置的频率和标准偏差。
  4. 如果标准偏差低于某个阈值,则图像像素化。

您在第 1 步之后的图像:

enter image description here

显示清晰的网格图案。现在,如果我们按列对像素求和,我们会得到:

enter image description here现在,如果我们能弄清楚峰列间距的规律性,并以此作为阈值来判断图像是否像素化。

这里是一些快速粗略的 python 代码,以提供一种方法的想法:

import numpy as np
import Image, ImageChops

im = Image.open('fireworks-pixelate-02.gif')
im2 = im.transform(im.size, Image.AFFINE, (1,0,1,0,1,1))
im3 = ImageChops.subtract(im, im2)
im3 = np.asarray(im3)
im3 = np.sum(im3,axis=0)[:-1]
mean = np.mean(im3)
peak_spacing = np.diff([i for i,v in enumerate(im3) if v > mean*2])
mean_spacing = np.mean(peak_spacing)
std_spacing = np.std(peak_spacing)
print 'mean gap:', mean_spacing, 'std', std_spacing

输出:

mean gap: 14.6944444444 std: 3.23882218342

低标准 = 像素化图像

这张未像素化的图片: enter image description here

对应的图是这样的:

enter image description here产生更高的标准:

mean gap: 16.1666666667 std: 26.8416136293

请注意,“平均差距”是没有意义的,因为标准差要高得多。

希望这足以说明这种方法可以很好地工作。

关于java - 如何检测图像是否像素化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14418983/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com