Görüntülerde görünmez filigran

oy
9

Nasıl telif amaçlı görüntülerdeki görünmez filigran eklerim? Bir piton kitaplığı için arıyorum.

Ne algoritması kullanılır? Ne performansı ve verimliliği hakkında?

Oluştur 04/09/2008 saat 17:15
kaynak kullanıcı
Diğer dillerde...                            


11 cevaplar

oy
1

Ne Exif olacak? Muhtemelen ne düşündüğünü kadar güvenli değil, ama çoğu kullanıcı bile var bilmiyor ve sen o kadar kolay filigran bilgileri okumak için yaparsanız dikkat edenler hala yine de yapmak mümkün olacaktır.

Cevap 04/09/2008 saat 17:33
kaynak kullanıcı

oy
1

Ben kutunun dışında bunu yapan bir kütüphane bulunmaktadır sanmıyorum. Kendi uygulamak istiyorsanız, kesinlikle giderdim Python Imaging Library (PIL).

Bu bir Python Cookbook tarifi bir ekleme PIL kullanan görünür bir görüntüye filigran. O ihtiyaçlarınız için yeterli değilse size aradığınızı biliyorsanız, sadece görünür yeterli şeffaflık ile filigran eklemek etmek için kullanabilir.

Cevap 04/09/2008 saat 17:56
kaynak kullanıcı

oy
6

Sen Steganografi içine bakmak isteyebilirsiniz; Bu görüntülerin içindeki verileri saklıyor. Eğer bir lossier biçimi veya resim üzerinden bile mahsul parçalarına dönüştürmek eğer kaybolmaz biçimi vardır.

Cevap 04/09/2008 saat 18:18
kaynak kullanıcı

oy
0

Ben Ugh benzer bir cevap göndermek için gidiyordu. Ben (bir geçerliyse ve belki küçük bir telif hakkı deyimi) algılamak ve kırmak için zor bir şekilde görüntüye çevirmektir kaynağını açıklayan küçük bir TXT dosyasını koyarak öneririm.

Cevap 04/09/2008 saat 18:20
kaynak kullanıcı

oy
0

Ben bu kırılmaz için ne kadar önemli emin değilim, ama basit bir çözüm sadece görüntünün sonuna bir metin dosyası eklemek olabilir. Böyle bir şey, "Bu görüntüye ... aittir".

Eğer bir izleyici / tarayıcıda görüntüyü açarsanız, normal bir jpeg gibi görünüyor, ama bir metin düzenleyicide açın eğer son satır okunabilir olacaktır.

Aynı yöntem, bir görüntü içine gerçek bir dosya eklemek sağlar. ( Bir resmin içindeki bir dosyayı gizlemek Ben biraz gelişigüzel olduğunu gördük), ancak 7-zip dosyaları çalışmıyor gibi görünüyor. Görüntünün içine copywrite hediyeler her türlü gizlemek olabilir.

Yine, hayal herhangi bir streç tarafından kırılmaz değil, ama çıplak gözle tamamen görünmez.

Cevap 04/09/2008 saat 18:45
kaynak kullanıcı

oy
0

Bazı resim formatları siz de keyfi bilgiyi saklayabilir başlıkları var.
Örneğin, PNG şartname metin veri saklayabilir bir parça vardır. Bu, yukarıda, ama görüntü verilerine kendisine rasgele veri eklemeden cevapları benzer.

Cevap 04/09/2008 saat 18:59
kaynak kullanıcı

oy
1

exif veya resim meta saklanan veriler dışında bu yüzden, "kırılmaz" filigran arıyorum.

Burada cevaplar beklerken Web üzerinde bazı ilginç şeyler bulduk: http://www.cosy.sbg.ac.at/~pmeerw/Watermarking/

algoritmalar ve bunların karakteristiklerinin (yaptıklarını ve nasıl kırılmaz olduklarını) hakkında oldukça ayrıntılı olan bir yüksek lisans tezi bulunmaktadır. Ben derinlemesine okumak için herhangi bir zamanım yok, ama bu malzeme ciddi görünüyor. kırpma JPEG sıkıştırma desteği algoritmalar, gama düzeltmesi veya bir şekilde ölçekleme aşağı vardır. Bu, C, ama Python için de kullanılabilir hale can veya Python C kütüphaneleri kullanın.

Ancak, 2001 den ve ben 7 yıl bu alanda uzun bir süre sanırım :( Eğer biri çok benzer ve daha yeni şeyler var mı?

Cevap 04/09/2008 saat 20:06
kaynak kullanıcı

oy
5

Ben aşağıdaki kodu kullanabilirsiniz. Bu PIL gerektirir:

def reduceOpacity(im, opacity):
    """Returns an image with reduced opacity."""
    assert opacity >= 0 and opacity <= 1
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    else:
        im = im.copy()
    alpha = im.split()[3]
    alpha = ImageEnhance.Brightness(alpha).enhance(opacity)
    im.putalpha(alpha)
    return im

def watermark(im, mark, position, opacity=1):
    """Adds a watermark to an image."""
    if opacity < 1:
        mark = reduceOpacity(mark, opacity)
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    # create a transparent layer the size of the image and draw the
    # watermark in that layer.
    layer = Image.new('RGBA', im.size, (0,0,0,0))
    if position == 'tile':
        for y in range(0, im.size[1], mark.size[1]):
            for x in range(0, im.size[0], mark.size[0]):
                layer.paste(mark, (x, y))
    elif position == 'scale':
        # scale, but preserve the aspect ratio
        ratio = min(float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1])
        w = int(mark.size[0] * ratio)
        h = int(mark.size[1] * ratio)
        mark = mark.resize((w, h))
        layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))
    else:
        layer.paste(mark, position)
    # composite the watermark with the layer
    return Image.composite(layer, im, layer)

img = Image.open('/path/to/image/to/be/watermarked.jpg')

mark1 = Image.open('/path/to/watermark1.png')
mark2 = Image.open('/path/to/watermark2.png')

img = watermark(img, mark1, (img.size[0]-mark1.size[0]-5, img.size[1]-mark1.size[1]-5), 0.5)
img = watermark(img, mark2, 'scale', 0.01)

filigran göremeyecek soluktur. Sadece düz bir renk görüntüsü gerçekten gösterebiliriz. Ben filigran göstermez bir görüntü oluşturmak için kullanabilirsiniz, ancak orijinal görüntüyü kullanarak bir bit-bit çıkarma yaparsanız, benim filigran olduğunu gösterebilir.

Nasıl çalıştığını görmek istiyorsanız, gidin TylerGriffinPhotography.com . Sahada Her bir görüntü, iki kez, filigran haline getirilmiş:% 50 donukluk (kenarından 5px) sağ alt köşesinde filigran ile bir kez ve bir kez filigran ölçekler ( "ölçek" kullanılarak% 1 opaklıkta tüm görüntü üzerinde bütün resim). Eğer ikinci, düşük donukluk filigran şekli ne olduğunu anlamaya?

Cevap 05/09/2008 saat 05:32
kaynak kullanıcı

oy
1

Eh, görünmez damgalama o kadar kolay değildir. Digimarc'ı Kontrol, ne para onlar üzerinde kazanmak etmedi. Yalnız bir deha ücretsiz kullanım için bir ayrılacağınız yazmıştır serbest C / Python kodu vardır. Ben kendi algoritması uyguladık ve aracın adı SignMyImage olduğunu. ilgilenen varsa ... Google'dan F>

Cevap 12/02/2009 saat 14:16
kaynak kullanıcı

oy
1

Daha yeni bir (2005) dijital filigran SSS de yoktur watermarkingworld.org

Cevap 28/03/2009 saat 05:31
kaynak kullanıcı

oy
2

Bahsettiğin varsa steganografi , burada bir arkadaşı kez (Python 2.x kodu) için yaptığım eski bir değil çok süslü bir modül var:

kod

from __future__ import division

import math, os, array, random
import itertools as it
import Image as I
import sys

def encode(txtfn, imgfn):
    with open(txtfn, "rb") as ifp:
        txtdata= ifp.read()
    txtdata= txtdata.encode('zip')

    img= I.open(imgfn).convert("RGB")
    pixelcount= img.size[0]*img.size[1]
##  sys.stderr.write("image %dx%d\n" % img.size)

    factor= len(txtdata) / pixelcount
    width= int(math.ceil(img.size[0]*factor**.5))
    height= int(math.ceil(img.size[1]*factor**.5))

    pixelcount= width * height
    if pixelcount < len(txtdata): # just a sanity check
        sys.stderr.write("phase 2, %d bytes in %d pixels?\n" % (len(txtdata), pixelcount))
        sys.exit(1)
##  sys.stderr.write("%d bytes in %d pixels (%dx%d)\n" % (len(txtdata), pixelcount, width, height))
    img= img.resize( (width, height), I.ANTIALIAS)

    txtarr= array.array('B')
    txtarr.fromstring(txtdata)
    txtarr.extend(random.randrange(256) for x in xrange(len(txtdata) - pixelcount))

    newimg= img.copy()
    newimg.putdata([
        (
            r & 0xf8 |(c & 0xe0)>>5,
            g & 0xfc |(c & 0x18)>>3,
            b & 0xf8 |(c & 0x07),
        )
        for (r, g, b), c in it.izip(img.getdata(), txtarr)])
    newimg.save(os.path.splitext(imgfn)[0]+'.png', optimize=1, compression=9)

def decode(imgfn, txtfn):
    img= I.open(imgfn)
    with open(txtfn, 'wb') as ofp:
        arrdata= array.array('B',
            ((r & 0x7) << 5 | (g & 0x3) << 3 | (b & 0x7)
            for r, g, b in img.getdata())).tostring()
        findata= arrdata.decode('zip')
        ofp.write(findata)

if __name__ == "__main__":
    if sys.argv[1] == 'e':
        encode(sys.argv[2], sys.argv[3])
    elif sys.argv[1] == 'd':
        decode(sys.argv[2], sys.argv[3])

algoritma

mavi bant 3 en anlamsız bit, 2 LSB yeşil bir ve kırmızı biri 3 LSB: Bu kullanarak görüntü piksel başına bir veri baytı saklar.

kodlamak fonksiyonu: Bir giriş metin dosyası zlib tarafından sıkıştırılır ve giriş görüntü sıkıştırılmış bayt olarak en az bir o kadar piksel var olmasını sağlamak için (oranlarını tutarak) boyutlandırılır. Bir PNG giriş görüntüsünün (siz-gibi steganografik verileri içeren kaydedilir :) kodu terk eğer öyleyse girdi olarak bir ".png" dosya adını kullanmayın aynı adı taşıyan görüntüsü.

kod çözme fonksiyonu: önceden depolanmış zlib sıkıştırılmış veri giriş görüntü çıkarılan ve sağlanan bir dosya adı altında sıkıştırılmamış kaydedilir.

Ben eski kod hala çalışır, bu nedenle burada steganografik verileri içeren bir örnek görüntü bu doğrulanmadı:

steganografik verileri içeren

Sen eklenen gürültü zar zor görünür olduğunu fark edeceksiniz.

Cevap 31/10/2010 saat 17:03
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more