本文用 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. 使用 Spring HATEOAS 开发 REST 服务--转

    原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-SpringHATEOAS/index.html?ca=drs-&utm_source ...

  2. iOS中关于字符 “&”的作用?

    如NSFileManager中关于判断是否目录的 iOS中关于字符 "&"的作用? >> ios这个答案描述的挺清楚的:http://www.goodpm.ne ...

  3. tgtadm和iscsiadm命令的用法

    一.tgtadm命令 tgtadm常用于管理三类对象:     target:创建new,删除,查看     lun:创建,查看,删除     account:创建用户,绑定,解绑定,删除,查看 语法 ...

  4. IDEA使用GIT 上传到GitHub

    1.下载Git https://www.git-scm.com/download/ 2.安装 3.IDEA配置Git(设置Git路径,点击Test),如下代表成功 4.创建仓库 5.add 6.pus ...

  5. CMSIS-RTOS 中断处理Interrupt Handling

    RTOS中断处理Interrupt Handling 在RTOS中使用信号来触发线程间的行为是比较简单和高效的,而对于Cortex-M微控制器来讲,从中断源获取信号来触发线程同样是一种重要的方式.虽然 ...

  6. CMSIS-RTOS 简介

    CMSIS-RTOS API是基于Arm®Cortex®-M处理器的设备的通用RTOS接口.CMSIS-RTOS为需要RTOS功能的软件组件提供标准化API,从而为用户和软件行业带来了巨大的好处. C ...

  7. js中数组增删查改unshift、push、pop、shift、slice、indexOf、concat、join

    js中数组增删查改unshift.push.pop.shift.slice.indexOf.concat.join

  8. 11 hbase源码系列(十一)Put、Delete在服务端是如何处理

    hbase源码系列(十一)Put.Delete在服务端是如何处理?    在讲完之后HFile和HLog之后,今天我想分享是Put在Region Server经历些了什么?相信前面看了<HTab ...

  9. 赋值、复制构造函数和构造函数 & 异常安全的赋值

    异常安全的赋值 需要注意,复制赋值和复制构造,相兼容. 赋值时候,要带上自检查.

  10. ORA-12514: TNS: 监听程序当前无法识别连接描写叙述符中请求的服务

    不指定数据库能够正常连接: 指定数据库和使用PL/SQL Developer都出现错误: 在此说明一下我的环境:Oralce装的是64位的在使用PL/SQL Developer时曾出现过初始化错误,解 ...