PHP,检测水印图像?

时间:2013-03-11 13:29:07

标签: php image-processing

我有一个像100万张图像的图书馆,其中大约一半是在同一地点用相同的半透明水印加水印。

我从哪里开始,用水印检测图像?是否有一些标准工具用于此目的?

6 个答案:

答案 0 :(得分:3)

如果根据您的问题,您只想检测带水印的图像,可以使用以下算法:

  • 提取水印图像的样本扫描水印图像
  • 逐个像素并将第一个像素存储在一个数组中。扫描每个
  • 逐像素地存储图像并存储在数组中。每当一个行矩阵
  • 来自正在扫描的图像包含
  • 中数组的元素
  • 同样的订单,很可能是匹配。

代码可能是这样的:

$no_of_pixels = what_you_got;
$matched = 0;
$thumbpixels = array();
$wmark = imagecreatefrompng("watermark.png");
list($width, $height) =  getimagesize("watermark.png");
$tesimage = imagecreatefrompng("test.png");
for($h = 0; $h < $height; $h++){    
    for($w = 0; $w < $width; $w++){
        if(imagecolorsforindex($testimage, imagecolorat($testimage, $w, $h)) == $thumbpixels[0]){
            while($thumbpixels[$i++] === imagecolorsforindex($tesimage, imagecolorat($wmark, $w, $h)) && $no_of_pixels != $matched){
                $matched++;
            }
            if($matched == $no_of_pixels) echo "Voila, we found it!";
        }
    }
}

修改

只是看到你的缩略图示例。如果您只想检测文字,可以尝试tesseract-ocrPhpOCR

您也可以考虑PHPSane

答案 1 :(得分:2)

检测图像中的几乎任何特征称为对象检测。有一种被广泛使用的库叫OpenCV。它有一个非常简单的SDK,虽然设置可能是一个真正的痛苦。它很好地支持C / C ++和(几乎支持) Python。我第一次开始使用OpenCV时花了3个星期的时间来训练自己的Classfier (training)

但我不会完全依赖这个解决方案并考虑我的优先事项。而且,使用自定义分类器很难实现良好的速率。其他方法更耗时。

答案 2 :(得分:2)

简而言之,并非完全准确。

充其量,您只能在图像上应用启发式方法,看它是否与确切的水印相匹配,并获得置信度 - 例如,如果水印是50%白色叠加层,那么主要是白色的场景可以给出误报,当然反过来也是如此。

如果图像使用有损压缩(例如JPEG)作为边缘,并且饱和度可能导致水印不像预期的那样饱和,或者如预期那样精确定位,则也可能出现问题。

答案 3 :(得分:1)

因为您知道水印总是在哪里,所以您可以使用imagecoloratimagecolorsforindex来获取水印内外像素的Alpha值。我希望在没有水印时alpha值相似,并且在存在时(在某个阈值内你需要确定)不同。当然,这可能不适用于所有图像,因此如果您需要100%的准确度,您可能需要更可靠的东西。

答案 4 :(得分:1)

在您的情况下,如果您在可预测的位置寻找相同的徽标,则相对简单。然而,在元数据中匹配版权声明会更加简单和快速(根据我在其他地方的评论)!

水印不会对内容产生固定的变化 - 每个修改过的像素将根据水印和图像本身获得新值。因此,你需要提取这些信息 - 我将分析图像,只看衍生物的大小(而不是相位)。

然后它只是correlating只有水印之一(或带有水印和其他内容的地段)的差异。

除非你很乐意编写自己的扩展,否则你真的不想在PHP中进行这种图像处理。大多数图像处理工具包都支持差异化和相关性。

顺便说一句:如果您不知道如何区分图像,和/或无法理解如何关联图像,请不要问 - 这不是讨论的正确论坛

答案 5 :(得分:0)

如果没有工具可以执行此操作,您可以尝试以下操作:

  1. 识别水印在像素百分比中的位置,例如右下角40px x 100px

  2. 对于每张图片,制作临时副本并裁剪出水印出现的位置。这应该使水印版本和非水印版本保持相同

  3. 比较图像 - 例如宽度x高度,文件大小,CRC或实际像素比较的组合,但对于一百万个图像,您需要一些严重的CPU功率。