]> AND Private Git Repository - canny.git/blobdiff - stc/exp/raphus/sobel555_for_ensemble.py
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
extraction améliorée, ajout de mesure de qualité sur lena et quelques typos
[canny.git] / stc / exp / raphus / sobel555_for_ensemble.py
index 37333f85b5057ae94a2a343b74402e351f7e7421..4a31c2028160f9a1e05988c90a399b7a56c26309 100644 (file)
@@ -429,8 +429,8 @@ def compute_filter_canny(level,image,MsgLen):
     processed= array(processed.getdata()).flatten()
     List7=set(compute_list_bit_to_change(100,processed))
 
-    #nb_bit_embedded=(512*512/10)+40
-    nb_bit_embedded=max(2*MsgLen,int(len(List3)/MsgLen)*MsgLen)+40
+    
+    nb_bit_embedded=max(2*MsgLen,int(len(List3)/MsgLen)*MsgLen)
     print "nb_bit_embedded",nb_bit_embedded
     AvailablePixel3=List3
     AvailablePixel5=AvailablePixel3.union(List5)
@@ -489,10 +489,115 @@ def compute_filter_canny(level,image,MsgLen):
 
 
 
+def verifie(fileout,leng_msg,Message,):
+    global M,X
+    bit_to_read = 1
+    dd2 = im.open(fileout)
+    dd2 = dd2.convert('RGB') 
+    red2, green, blue = dd2.split()
+    level2=red2.copy()
+
+    [List_bit_to_change2,Weight2]=compute_filter_canny(level2,dd2,leng_msg)
+
+
+    level2= array(level2.getdata()).flatten()
+
+    print "support2",len(List_bit_to_change2)
+    print "message2",len(Message)
+    print "weight2",len(Weight2)
+
+    alpha = float(len(List_bit_to_change2))/len(Message)
+    assert alpha >= 2 
+    index = min(int(alpha),9)
+    H_hat2 = {
+        2 : [71,109],
+        3 : [95, 101, 121],
+        4 : [81, 95, 107, 121],
+        5 : [75, 95, 97, 105, 117],
+        6 : [73, 83, 95, 103, 109, 123],
+        7 : [69, 77, 93, 107, 111, 115, 121],
+        8 : [69, 79, 81, 89, 93, 99, 107, 119],
+        9 : [69, 79, 81, 89, 93, 99, 107, 119, 125]
+        }[index]
+
+
+    print H_hat2
+
 
+    Stc_message2=[getBit(level2[l],bit_to_read) for l in List_bit_to_change2]
+    LL2=list(List_bit_to_change2)
 
+    """
+    print "Level",max([level2[l]-level[l] for l in xrange(len(Stc_message2))])
+    print "List bit to change",max([LL2[l]-LL1[l] for l in xrange(len(Stc_message))])
+    print "Stc message", max([Stc_message[l]-Stc_message2[l] for l in xrange(len(Stc_message))])
+    """
+    Message2 = [x%2 for x in prod(H_hat2,len(Message),Stc_message2)] 
+    level2=Message2
 
-def mystego(filein, fileout):
+#    print "mesg",Message
+#    print "mesg2",Message2
+
+    l=0
+    val_mod2=0
+    list_msg=[]
+    decoded_msg=""
+
+
+
+    bbs = BlumBlumShub();
+    bbs.setN(M)
+    bbs.setSeed(X)
+
+    List_random=[]
+    while len(List_random)<len(Message2):
+        List_random.extend(Denary2Binary(bbs.next()))
+
+
+
+    MessageDecoded2=[(int(Message2[l])^int(List_random[l])) for l in xrange(len(Message2))]
+#    print conv_list_bit(''.join([`MessageDecoded2[i]` for i in xrange(leng_error*8)]))
+#    print int(conv_list_bit(''.join([`MessageDecoded2[i]` for i in xrange(leng_error*8)])))
+
+    #print "MessageDecoded2",MessageDecoded2
+    
+    outIm = im.new("L",im.open("invader.png").size)
+    (l,h) = outIm.size
+    print "taille de l'image",l*h
+    print "taille des donneées",len(MessageDecoded2)
+    queue = [255 if x != 0 else 0 for x in MessageDecoded2]
+    queue = queue[len(queue)-l*h:]
+    outIm.putdata(queue)
+    outIm.save("apresSobel.png")
+"""
+    print conv_list_bit(''.join([`MessageDecoded2[i]` for i in xrange(len(Message2))]))
+   for l in List_bit_to_change2:
+       if(val_mod2<leng_error*8):
+           list_msg.append(`getBit(level2[l],bit_to_read)^int(List_random[val_mod2])`)
+           if(val_mod2==leng_error*8-1):
+               bin_leng2=''.join(list_msg)
+               coded_msg2=conv_list_bit(bin_leng2)
+               clear_msg2=coded_msg2
+               length_msg=int(clear_msg2)
+               list_msg=[]
+       if(val_mod2>=leng_error*8 and val_mod2<leng_error*8+length_msg*leng_error):
+           list_msg.append(`getBit(level2[l],bit_to_read)^int(List_random[val_mod2])`)
+           if(len(list_msg)==leng_error*8):
+               pack=''.join(list_msg)
+               msg=conv_list_bit(pack)
+               decoded_msg=decoded_msg+msg
+               list_msg=[]
+       val_mod2+=1
+       l=l+1
+       print decoded_msg#[0:20]
+"""
+
+
+
+
+
+def mystego(filein, fileout,file_msg="invader"):
     bit_to_read = 1
     global M,X
     bbs = BlumBlumShub();
@@ -503,23 +608,20 @@ def mystego(filein, fileout):
     dd = dd.convert('RGB') 
     red, green, blue = dd.split()
     level=red.copy()
+    
+    #print type(level),level
 
 
-
+    """
 
 
     message="Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete   Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete  Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete   Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete  Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete   Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete  Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete   Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete   Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete  Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete   Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete Ce que j'écris est très original... Bref, je suis un poete   Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete Ce que j'écris est très original... Bref, je suis un poete   Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete voila c'est la fin blablabla:-)"
 
     message="Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela. Bon voici un test avec un message un peu plus long. Bon j'en rajoute pour voir. Ce que j'écris est très original... Bref, je suis un poete   Salut christophe, arrives tu à lire ce message? normalement tu dois lire cela."
 
-    """
-    message = ""
-    for c in [x if x==0 else 1 for x in im.open("invader.png").getdata()]:
-        message +=str(c)        
     
-    print message
-    """
-
+   
+    
     leng_msg=len(message)
     print "taille du message en caracteres",leng_msg
     message=message+((leng_msg+7)/8*8-leng_msg)*" "
@@ -539,36 +641,58 @@ def mystego(filein, fileout):
         size=size+len(m_bin)
         List_pack.extend(m_bin) 
 
+    """    
+
+
+    
+    message = []
+    for c in [x if x==0 else 1 for x in im.open("invader.png").getdata()]:
+        message +=[c]
+    
+    leng_msg=len(message)
+    leng='%08d'%len(message)
+    len_leng=len(leng)
+    leng_error=int(len_leng)
+    leng_cor=leng    
+    List_pack=a2b_list(leng_cor)
+    List_pack += message
+    #print List_pack
 
     leng_msg=len(List_pack)
+    print "leng_msg",leng_msg
 
     [List_bit_to_change,Weight]=compute_filter_canny(level,dd,leng_msg)
     level= array(level.getdata()).flatten()
    
     List_random=[]
-    while len(List_random)<len(List_bit_to_change):
+    while len(List_random)<len(List_pack):
         List_random.extend(Denary2Binary(bbs.next()))
 
-        
+
 
     #print List_bit_to_change
     Support=[]
     for l in List_bit_to_change : 
         Support += [getBit(level[l],bit_to_read) ]
-    #print len(List_pack)
+
     #List_pack = message
 
 
     Message=[(int(List_pack[l])^int(List_random[l])) for l in xrange(len(List_pack))]
 
-    print "support",len(List_bit_to_change)
-    print "message",len(Message)
-    print "weight",len(Weight)
+    #print "support",len(List_bit_to_change)
+    #print "message",Message
+    #print "weight",len(Weight)
 
+    #(x_b,Stc_message,H_hat) = stc(Support,Weight,Message)
+    
     (x_b,Stc_message,H_hat) = stc(Support,Weight,Message)
 
-    print "pourcentage modif",nbdif(x_b,Stc_message)
-    print "taille Stc_message",len(Stc_message)
+    print "comparaison entre stc_message et message", len(Stc_message),len(Message)
+
+
+    #print "pourcentage modif",nbdif(x_b,Stc_message)
+    #print "taille Stc_message",len(Stc_message)
 #    Stc_message=Message
 
 
@@ -586,9 +710,9 @@ def mystego(filein, fileout):
             level[l]=float64(setBit(level[l],bit_to_read,Stc_message[size_mesg]))
             size_mesg+=1
 
-    print 'size mesg',size_mesg
-    print 'val mod',val_mod
-    print 'len message',len(Message),len(List_pack)
+    #print 'size mesg',size_mesg
+    #print 'val mod',val_mod
+    #print 'len message',len(Message),len(List_pack)
 
     
 
@@ -598,126 +722,25 @@ def mystego(filein, fileout):
     zz3.save(fileout)
     #zz4.show()
 
+    verifie(fileout,leng_msg,Message)
 
 
-    
-    dd2 = im.open(fileout)
-    dd2 = dd2.convert('RGB') 
-    red2, green, blue = dd2.split()
-    level2=red2.copy()
-
-    [List_bit_to_change2,Weight2]=compute_filter_canny(level2,dd2,leng_msg)
-
-
-    level2= array(level2.getdata()).flatten()
-
-    print "support2",len(List_bit_to_change2)
-    print "message2",len(Message)
-    print "weight2",len(Weight2)
-
-    alpha = float(len(List_bit_to_change2))/len(Message)
-    assert alpha >= 2 
-    index = min(int(alpha),9)
-    H_hat2 = {
-        2 : [71,109],
-        3 : [95, 101, 121],
-        4 : [81, 95, 107, 121],
-        5 : [75, 95, 97, 105, 117],
-        6 : [73, 83, 95, 103, 109, 123],
-        7 : [69, 77, 93, 107, 111, 115, 121],
-        8 : [69, 79, 81, 89, 93, 99, 107, 119],
-        9 : [69, 79, 81, 89, 93, 99, 107, 119, 125]
-        }[index]
-
-
-    print H_hat,H_hat2
-
 
-    Stc_message2=[getBit(level2[l],bit_to_read) for l in List_bit_to_change2]
-    LL1=list(List_bit_to_change);
-    LL2=list(List_bit_to_change2)
-
-    print "Level",max([level2[l]-level[l] for l in xrange(len(Stc_message2))])
-    print "List bit to change",max([LL2[l]-LL1[l] for l in xrange(len(Stc_message))])
-    print "Stc message", max([Stc_message[l]-Stc_message2[l] for l in xrange(len(Stc_message))])
 
-    Message2 = [x%2 for x in prod(H_hat2,len(Message),Stc_message2)] 
-    level2=Message2
-
-#    print "mesg",Message
-#    print "mesg2",Message2
 
-    print equiv(Message,Message2)
-
-    print "fini"
-
-    l=0
-    val_mod2=0
-    list_msg=[]
-    decoded_msg=""
-
-    MessageDecoded2=[(int(Message2[l])^int(List_random[l])) for l in xrange(len(Message2))]
-#    print conv_list_bit(''.join([`MessageDecoded2[i]` for i in xrange(leng_error*8)]))
-#    print int(conv_list_bit(''.join([`MessageDecoded2[i]` for i in xrange(leng_error*8)])))
-
-    print conv_list_bit(''.join([`MessageDecoded2[i]` for i in xrange(len(Message2))]))
-
-
-    
-
-
-#    for l in List_bit_to_change2:
-#        if(val_mod2<leng_error*8):
-#            list_msg.append(`getBit(level2[l],bit_to_read)^int(List_random[val_mod2])`)
-#            if(val_mod2==leng_error*8-1):
-#                bin_leng2=''.join(list_msg)
-#                coded_msg2=conv_list_bit(bin_leng2)
-#                clear_msg2=coded_msg2
-#                length_msg=int(clear_msg2)
-#                list_msg=[]
-#        if(val_mod2>=leng_error*8 and val_mod2<leng_error*8+length_msg*leng_error):
-#            list_msg.append(`getBit(level2[l],bit_to_read)^int(List_random[val_mod2])`)
-#            if(len(list_msg)==leng_error*8):
-#                pack=''.join(list_msg)
-#                msg=conv_list_bit(pack)
-#                decoded_msg=decoded_msg+msg
-#                list_msg=[]
-#        val_mod2+=1
-#        l=l+1
-
-    print decoded_msg#[0:20]
-    print len(List_bit_to_change)
-    list_nb_bit.append(filein)
-    list_nb_bit.append(len(List_bit_to_change2))
-
-
-
-
-#path_cover = '/localhome/couturie/ensemble/cover_bad_laplace/'
-path_stego = '/localhome/couturie/ensemble/BossBase-1.0-canny_new/'
-path_cover = '/localhome/couturie/ensemble/BossBase-1.0-cover/'
-#path_stego = '/tmp/'
-#path_stego = '/home/couturie/BossBase-1.0-canny/'
-#listing = os.listdir(path_cover)
-
-list_nb_bit=[]
-l=0
-
-
-mystego(argv[1],argv[2])
 # entree sortie 
+def main(): 
+    path_stego = '/home/couchot/rech/CCG12/canny/stc/exp/raphus/stego/'
+    path_cover = '/home/couchot/rech/BCG10/Oxford11/experiments/images/'
+    list_nb_bit=[]
+    l=0
+    listing = [957, 108, 106, 29, 431, 924, 262, 477, 346, 809]
+    for infile in listing:
+        #    if l<10:
+        fi = path_cover+str(infile)+'.png'
+        fo = path_stego+str(infile)+'.png'
+        mystego(fi,fo)
+        l+=1
 
-raise SystemExit
-
-for infile in listing:
-#    if l<10:
-    if infile[0]==argv[1]:
-        print "current file is: " + infile, path_stego+infile
-        mystego(path_cover+infile,path_stego+infile)
-    l+=1
-
-#f = open('histogram_boss_canny_100255', 'w')
-#f = open('histogram', 'w')
-#for item in list_nb_bit:
-#  f.write("%s\n" % item)
+if __name__ == "__main__":
+    main()