本文用 Python 实现 PS 滤镜特效,Marble Filter, 这种滤镜使图像产生不规则的扭曲,看起来像某种玻璃条纹, 具体的代码如下:

import numpy as np
import math
import numpy.matlib
from skimage import io
import random
from skimage import img_as_float
import matplotlib.pyplot as plt def Init_arr():
B = 256
P = np.zeros((B+B+2, 1))
g1 = np.zeros((B+B+2, 1))
g2 = np.zeros((B+B+2, 2))
g3 = np.zeros((B+B+2, 3))
N_max = 1e6
for i in range(B+1):
P[i] = i
g1[i] = (((math.floor(random.random()*N_max)) % (2*B))-B)*1.0/B
g2[i, :] = (np.mod((np.floor(np.random.rand(1, 2)*N_max)), (2*B))-B)*1.0/B
g2[i, :] = g2[i, :] / np.sum(g2[i, :] **2)
g3[i, :] = (np.mod((np.floor(np.random.rand(1, 3)*N_max)), (2*B))-B)*1.0/B
g3[i, :] = g3[i, :] / np.sum(g3[i, :] **2) for i in range(B, -1, -1):
k = P[i]
j = math.floor(random.random()*N_max) % B
P [i] = P [j]
P [j] = k P[B+1:2*B+2]=P[0:B+1];
g1[B+1:2*B+2]=g1[0:B+1];
g2[B+1:2*B+2, :]=g2[0:B+1, :]
g3[B+1:2*B+2, :]=g3[0:B+1, :]
P = P.astype(int)
return P, g1, g2, g3 def Noise_2(x_val, y_val, P, g2): BM=255
N=4096 t = x_val + N
bx0 = ((np.floor(t).astype(int)) & BM) + 1
bx1 = ((bx0 + 1).astype(int) & BM) + 1
rx0 = t - np.floor(t)
rx1 = rx0 - 1.0 t = y_val + N
by0 = ((np.floor(t).astype(int)) & BM) + 1
by1 = ((bx0 + 1).astype(int) & BM) + 1
ry0 = t - np.floor(t)
ry1 = rx0 - 1.0 sx = rx0 * rx0 * (3 - 2.0 * rx0)
sy = ry0 * ry0 * (3 - 2.0 * ry0) row, col = x_val.shape q1 = np.zeros((row, col ,2))
q2 = q1.copy()
q3 = q1.copy()
q4 = q1.copy() for i in range(row):
for j in range(col):
ind_i = P[bx0[i, j]]
ind_j = P[bx1[i, j]]
b00 = P[ind_i + by0[i, j]]
b01 = P[ind_i + by1[i, j]]
b10 = P[ind_j + by0[i, j]]
b11 = P[ind_j + by1[i, j]] q1[i, j, :] = g2[b00, :]
q2[i, j, :] = g2[b10, :]
q3[i, j, :] = g2[b01, :]
q4[i, j, :] = g2[b11, :] u1 = rx0 * q1[:, :, 0] + ry0 * q1[:, :, 1]
v1 = rx1 * q2[:, :, 0] + ry1 * q2[:, :, 1]
a = u1 + sx * (v1 - u1) u2 = rx0 * q3[:, :, 0] + ry0 * q3[:, :, 1]
v2 = rx1 * q4[:, :, 0] + ry1 * q4[:, :, 1]
b = u2 + sx * (v2 - u2) out = (a + sy * (b - a)) * 1.5
return out file_name='D:/Visual Effects/PS Algorithm/4.jpg';
img=io.imread(file_name) img = img_as_float(img)
row, col, channel = img.shape xScale = 25.0
yScale = 25.0
turbulence =0.25 xx = np.arange (col)
yy = np.arange (row) x_mask = numpy.matlib.repmat (xx, row, 1)
y_mask = numpy.matlib.repmat (yy, col, 1)
y_mask = np.transpose(y_mask) x_val = x_mask / xScale
y_val = y_mask / yScale Index = np.arange(256) sin_T=-yScale*np.sin(2*math.pi*(Index)/255*turbulence);
cos_T=xScale*np.cos(2*math.pi*(Index)/255*turbulence) P, g1, g2, g3 = Init_arr() Noise_out = Noise_2(x_val, y_val, P, g2) Noise_out = 127 * (Noise_out + 1) Dis = np.floor(Noise_out) Dis[Dis>255] = 255
Dis[Dis<0] = 0
Dis = Dis.astype(int) img_out = img.copy() for ii in range(row):
for jj in range(col): new_x = jj + sin_T[Dis[ii, jj]]
new_y = ii + cos_T[Dis[ii, jj]] if (new_x > 0 and new_x < col-1 and new_y > 0 and new_y < row-1):
int_x = int(new_x)
int_y = int(new_y) img_out[ii, jj, :] = img[int_y, int_x, :] plt.figure(1)
plt.imshow(img)
plt.axis('off'); plt.figure(2)
plt.imshow(img_out)
plt.axis('off'); plt.show();

图像的效果可以参考我之前写的博客:

http://blog.csdn.net/matrix_space/article/details/46789607

Python: PS 滤镜特效 -- Marble Filter的更多相关文章

  1. Python: PS 滤镜--水波特效

    本文用 Python 实现 PS 滤镜中的 水波特效 import numpy as np from skimage import img_as_float import matplotlib.pyp ...

  2. Python: PS 滤镜--旋涡特效

    本文用Python 实现 PS 滤镜的旋涡特效,具体的算法原理和效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/details/42215 ...

  3. Python: PS 滤镜--碎片特效

    本文用 Python 实现 PS 滤镜中的碎片特效,这个特效简单来说就是将图像在 上,下,左,右 四个方向做平移,然后将四个方向的平移的图像叠加起来做平均.具体的效果图可以参考之前的博客 http:/ ...

  4. Python: PS 滤镜--波浪特效

    本文用 Python 实现 PS 滤镜的波浪特效,具体效果可以参考之前的博客 http://blog.csdn.net/matrix_space/article/details/42215221 im ...

  5. Python: PS 滤镜--素描

    本文用 Python 实现 PS 滤镜中的素描特效,具体的算法原理和效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/details/386 ...

  6. Python: PS滤镜--径向模糊

    本文用 Python 实现 PS 滤镜中的径向模糊特效,具体的算法原理和效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/details/3 ...

  7. Python: PS 滤镜--高反差保留 (High pass)

    本文用 Python 实现 PS 滤镜中的 高反差保留 特效,具体的算法原理和图像效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/deta ...

  8. Python: PS 滤镜--扇形变换

    本文用 Python 实现 PS 滤镜中的一种几何变换特效,称为扇形变换,将图像扭曲成一个扇形,具体的算法原理和效果图可以参考以前的博客: http://blog.csdn.net/matrix_sp ...

  9. Python: PS 滤镜--USM 锐化

    本文用 Python 实现 PS 滤镜中的 USM 锐化效果,具体的算法原理和效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/detail ...

随机推荐

  1. python-深拷贝-浅拷贝

    python-深拷贝-浅拷贝 标签(空格分隔): 未分类 浅拷贝: 拷贝了引用,并没有拷贝内容 深拷贝: 深拷贝是对于一个对象所有层次的拷贝(递归)

  2. Python开源爬虫项目代码:抓取淘宝、京东、QQ、知网数据--转

    数据来源:数据挖掘入门与实战  公众号: datadw scrapy_jingdong[9]- 京东爬虫.基于scrapy的京东网站爬虫,保存格式为csv.[9]: https://github.co ...

  3. 联想服务器thinkserver TS550 Raid5制作及winserver2012R2 安装过来

    一. 联想服务器thinkserver TS550 Raid5制作 1.开机后按ctrl+i  进入raid配置模式 2.选择“1”配置所需Raid模式(这次配的是raid5) 3.按提示确认后退出 ...

  4. SPOJ 7258 SUBLEX 后缀数组 + 二分答案 + 前缀和

    Code: #include <cstdio> #include <algorithm> #include <cstring> #define setIO(s) f ...

  5. [洛谷P1156][codevs1684]垃圾陷阱

    题目大意:一头奶牛掉进了深度为d的坑里,现在有g个垃圾在特定时刻ti扔进来.奶牛可以吃垃圾以获得体力,吃第i个垃圾能获得mi的体力,也可以堆放垃圾以逃生,第i个垃圾高度为hi.当高度≥d时奶牛成功逃生 ...

  6. unity gitignore

    /[Ll]ibrary/ /[Tt]emp/ /[Oo]bj/ /[Bb]uild/ /[Bb]uilds/ /Assets/AssetStoreTools* # Autogenerated VS/M ...

  7. DBCP2配置详细说明(中文翻译)

    http://blog.csdn.net/kerafan/article/details/50382998 common-dbcp2数据库连接池参数说明 由于commons-dbcp所用的连接池出现版 ...

  8. codevs——T1337 银行里的迷宫

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解       题目描述 Description 楚楚每一次都在你的帮助下过了一关又一关(比如他开宴会). ...

  9. 一、 Hbase特性 3v特性,Volume(量级) Varity(种类) Velocity(速度)

    HBase中表的特点 大: 一个表可以由百亿行,上百万列(列多时,插入变慢) 面向列:面向列(族)的存储和权限控制,列(族)独立检索 稀疏:对于为空(null) 的列,并不占用存储空间,因此表可以设计 ...

  10. BZOJ5105: [CodePlus2017]晨跑

    [传送门:BZOJ5105] 简要题意: 给出a,b,c,求a,b,c的最小公倍数 题解: 直接搞(最近刷水题有点心态爆炸) 参考代码: #include<cstdio> #include ...