這個演算法是對photoshop中濾鏡->畫素化->碎片這個功能的學習。
PS這個功能好像不帶引數,不過我這裡有濾波半徑r可以進行控制。
因為我是看效果猜演算法的,效果肯定有所區別。
我的想法是對影象以r為長度,在上下左右四個方向做位移,然後進行混合。
程式碼還是很簡單,就不詳細介紹了。
處理效果如下:
原圖:
處理後效果:
PS碎片效果:
matlab程式碼如下:
clear all;close all;clc img=double(imread('lena.jpg')); [h w]=size(img); imshow(img,[]) r=10; %位移距離 %向上下左右四個方向移位,然後再混合
%ps也許是對左上、右上、左下、右下四個角的方向做的位移 left=zeros(h+2*r,w+2*r); right=zeros(h+2*r,w+2*r); top=zeros(h+2*r,w+2*r); bottom=zeros(h+2*r,w+2*r);
%這裡做了一個影象放大的處理,防止最後影象邊緣產生突變 left(r+1:h+r,1:w+r)=imresize(img,[h,w+r]); right(r+1:h+r,r+1:w+2*r)=imresize(img,[h,w+r]); top(1:h+r,r+1:w+r)=imresize(img,[h+r,w]); bottom(r+1:h+2*r,r+1:w+r)=imresize(img,[h+r,w]); imgn=0.25*(left+right+top+bottom); imgn=imgn(r+1:h+r,r+1:w+r); figure;imshow(imgn,[])