Arnold阿诺德置乱(猫脸变换)图像盲水印注入预处理(python)

针对彩色图像实现了arnold置换与置换还原,解决了cv2.imread()读取图像偏色、处理后无结果显示或显示结果为纯色图像等问题。

参考来源:

 

import cv2
import numpy as np
import matplotlib.image as mpimg

def arnold(img, shuffle_times, a, b):
    r, c, d = img.shape # 高,宽,通道个数
    p = np.zeros(img.shape, np.uint8)
    for times in range(shuffle_times):  # 置乱次数
        for i in range(r):
            for j in range(c):
                x = (i + b * j) % r
                y = (a * i + (a * b + 1) * j) % c
                p[x, y, :] = img[i, j, :]
        img = np.copy(p) # 深复制
    return p

img = mpimg.imread('lena.bmp')
img = img[:, :, [2, 1, 0]] # 解决显色问题
new = arnold(img, 1, 1, 3)
cv2.imshow('picture', new)
cv2.waitKey(0)
cv2.imwrite('new.bmp', new)

 

置换后还原代码:

def de_arnold(img,shuffle_time,a,b):
    r, c, d = img.shape
    dp = np.zeros(img.shape, np.uint8)

    for s in range(shuffle_time): 
        for i in range(r):
            for j in range(c):
                x = ((a * b + 1) * i - b * j) % r
                y = (-a * i + j) % c
                dp[x, y, :] = img[i, j, :]
        img = np.copy(dp) 
    return img

img = mpimg.imread('new.bmp')
img = img[:, :, [2, 1, 0]] 
new = de_arnold(img, 1, 1, 3)
cv2.imshow('picture', new)
cv2.waitKey(0)

 

1. arnold() 和 de_arnold()中 shuffle_time,a,b 三个参数的数值需要对应才能实现图像还原。
2. de_arnold()中的img为运行arnold()后通过cv2.imwrite()保存的结果。
3. 示例图为512*512的lena.bmp,此博客不支持上传.bmp格式的图片。

置乱后的图像(shuffle_time=1,a=1,b=3)

 


还原:


 

 

 

 

 


 

 

 


 





 

 

推荐这些技术文章:

python抠图

使用cv2实现蒙版扣取无背景图

import cv2
import numpy as np
img = cv2.imread('I:/test/pythonProject/database/test4png.png') #文件地址,需全部地址,无汉字
cv2.imshow("img",img) #显示原图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRA...

python图像的频域(傅里叶变换、低通滤波)

计算机视觉
课程实验2图像的频域

请叙述傅里叶变换的作用并编程实现图像的傅里叶变换,对比时域和频域的结果。如果采用zero padding方式改变图片大小,此时分析零填充对傅里叶变换的影响。

傅里叶变换的作用:
1.图像增强与图像去噪
 绝大部分噪音都是图像的高频分量,通过低通滤波器来滤除高频—噪声; 边缘也是图像的高频分量,可以通过添加高频分量来增强原始图像的边缘;
2.图像分割...

python 图像拼接

1 import cv2
2 import numpy as np
3 import pandas as pd
4 from PIL import Image
5
6 img1 = cv2.imread('lena.bmp', cv2.IMREAD_GRAYSCALE)
7 cv2.namedWindow("lena", cv2.WINDOW_AUTOSIZE)
8 cv2....

python 图片灰度化处理

import cv2

def Image_gray(image):#灰度化函数
h, w, ch = image.shape
for row in range(h):
for col in range(w):
b = image[row, col, 0]
g = image[row, col, 1]
...

python 读取文件夹下的图片并显示

项目下的image文件夹里有五张.bmp图像

1 import os
2 import cv2
3
4 def get_img_list(dir, firelist, ext=None):
5 newdir = dir
6 if os.path.isfile(dir): # 如果是文件
7 if ext is None:
8 ...

对图像进行SVD和PCA降维,可用于压缩或者图像数据增强(python版)

不懂原理的同学请参考:
https://blog.csdn.net/qq_43337858/article/details/102738352?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-6.control&depth_1-utm_source=distribute.pc...

python opencv 根据坐标抠图背景透明

# -*- coding: utf-8 -*-#
from json import load
import shutil
from traceback import format_exc

import logging
from pathlib import Path
import cv2
import numpy as np
from progress.bar import Bar
from ...

python 消除二值图像中面积小于某个阈值的连通域(消除孤立点)

from skimage import measure
import cv2
import numpy as np

##
##image:二值图像
##threshold_point:符合面积条件大小的阈值
def remove_small_points(image,threshold_point):
img = cv2.imread(image, 0) #输入的二值图...

python+cv2实现自动gamma校正

简单介绍
Gamma变换是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系:
 
Gamma变换就是用来图像增强,其提升了暗部细节,简单来说就是通过非线性变换,让图像从曝光强度的线性响应变得更接近人眼感受的响应,即将漂白(相机曝光)或过暗(曝光不足)的图片,进行矫正。
大于1时,对图像的灰度分布直方图具有拉伸作用(使灰度向高灰度值延展),而小于1时,对图像...

python对灰度图进行傅里叶变换和低通滤波

import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('lenaNoise.png', 0) # 直接读为灰度图像fft2 = np.fft.fft2(img) # FFT快速傅里叶变换s1 = np.log(np.abs(fft2))fftShift = np.fft...

文章标题:Arnold阿诺德置乱(猫脸变换)图像盲水印注入预处理(python)
文章链接:https://www.dianjilingqu.com/50832.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>