注:新方法移步這裡
之所以要加1是因為這個還沒有做完,這個只是按照自己的想法實現的,結果。。。果然是不行啊。
photoshop中的徑向模糊演算法我也不清楚,不過下面的對話方塊大致可以讓人猜到一些:
看那個小方框就可以了,我感覺是photoshop只在黑色畫素對應的地方進行模糊,其他的地方則不處理。我暫時只實現縮放的效果,如何改變品質也還不清楚。
我的演算法是對每乙個畫素分別計算他的卷積模板,卷積模板就靠卷積半徑r和當前畫素與影象中心畫素的斜率確定。
下面是**:
:n); %擴充套件上邊界
imgn(
1:m+r,n+r+1:n+2*r+1)=imgn(1:m+r,n:n+r); %擴充套件右邊界
imgn(m+r+1:m+2*r+1,r+1:n+2*r+1)=imgn(m:m+r,r+1:n+2*r+1
); %擴充套件下邊界
imgn(
1:m+2*r+1,1:r)=imgn(1:m+2*r+1,r+1:2*r); %擴充套件左邊界
cen_y=floor(m/2+r);
cen_x=floor(n/2+r);
for i=r+1:m+r
for j=r+1:n+r
w=create_mk(i,j,cen_y,cen_x,r); %製造卷積模板
[h w]=size(w);
hh=floor(h/2
); ww=floor(w/2
); s=imgn(i-hh:i+hh,j-ww:j+ww).*w;
imgn(i,j)=sum(sum(s))/sum(sum(w));
endend
imgn=imgn(r+1:m+r,r+1:n+r);
figure;
imshow(mat2gray(imgn));
create_mk.m
function w=create_mk(i,j,cen_y,cen_x,r)效果:if j ~=cen_x
k=(i-cen_y)/(j-cen_x);
theta=atan(k);
jiaodu=theta*180/pi; %不用弧度是知道tan(pi/2
)是多少
else
jiaodu=90
;
endjiaodu=mod(jiaodu,360
);
flag=0
; %%下面是確定卷積模板的寬和高。
if jiaodu>=0 && jiaodu<90
% jiaodu=jiaodu;
flag=1
;
endif jiaodu>=90 && jiaodu<180
jiaodu=180-jiaodu;
flag=2
;
endif jiaodu>=180 && jiaodu<270
jiaodu=jiaodu-180
; flag=3
;
endif jiaodu>=270 && jiaodu<360
jiaodu=360-jiaodu;
flag=4
;
endh=floor(r*sin(jiaodu*pi/180
)); w=floor(r*cos(jiaodu*pi/180
));
ifmod(h,2)==0
h=h+1
;
endif
mod(w,2)==0
w=w+1
;
endw=zeros(h,w);
%%為卷積模板賦值
pre_tmp_y=1
; pre_tmp_x=1
;
if w~=1 && h~=1
for i=1
:h
for j=1
:w tmp_y=floor(j*tan(jiaodu*pi/180
));
if tmp_y==i
w(pre_tmp_y:tmp_y,j)=r;
w(pre_tmp_y,pre_tmp_x:j)=r;
pre_tmp_y=tmp_y;
pre_tmp_x=j;
endend
endw(h,w)=r;
endif w==1
for i=1
:h w(i,
1)=r;
endend
if h==1
for j=1
:w w(
1,j)=r;
endend
w=w/sum(sum(w));
if flag==2 || flag==4 %如果角度在2,4
象限,卷積矩陣上下翻轉
w=flipud(w);
endend
![](https://pic.w3help.cc/c8a/1866751a5fcdf0c65c21e41d9f484.jpeg)
原圖
這裡的效果,半徑為30
photoshop數量取61結果
看到這兩張圖,我突然明白了屌絲與白富美、國產山寨機與國外智慧型機的區別。總之,效果差距還是很大的,其實速度差距也很大,演算法還要優化。暫時記錄到這裡。
matlab練習程式(表面模糊)
關於表面模糊的文章我是搜遍網際網路只找到下面這兩篇 1.2.第一篇原理比較清楚,不過沒有 第二篇原理就不太清楚了,不過有 就看各位能不能看懂彙編了。關於表面模糊,和其他模糊不同的是,其他模糊一般整個影象只用乙個模板矩陣,而表面模糊對每乙個畫素都需要建立乙個模版矩陣,因此計算量要大很多。解釋一下 確定...
matlab練習程式(毛玻璃模糊)
算是一種特效模糊方式吧,演算法原理就是用鄰域隨機畫素代替當前所處理的畫素就可以了。效果如下圖所示 原圖 處理後結果 matlab 如下 n 3 模糊直徑 for i 1 h for j 1 w offsetx n rand n 2 鄰域隨機值代替當前畫素 offsety n rand n 2 y f...
matlab練習程式(DBSCAN)
和kmeans相比,不需要事先知道資料的類數。以程式設計的角度來考慮,具體演算法流程如下 1.首先選擇乙個待處理資料。2.尋找和待處理資料距離在設定半徑內的資料。3.將找到的半徑內的資料放到乙個佇列中。4.拿佇列頭資料作為當前待處理資料並不斷執行第2步。5.直到遍歷完佇列中所有資料,將這些資料記為一...