matlab練習程式(徑向模糊1)

2022-06-12 14:33:08 字數 3357 閱讀 5751

注:新方法移步這裡

之所以要加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

效果:

原圖

這裡的效果,半徑為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.直到遍歷完佇列中所有資料,將這些資料記為一...