matalb編寫程式實現ps的「素描濾鏡」

2021-10-23 04:18:35 字數 1875 閱讀 5211

ps的各種濾鏡都可以用matlab**來進行實現,今天給出乙個例子:素描濾鏡

原圖如圖:

實驗步驟如下:

1.首先原圖就是灰度圖,我們不需要進行去色處理,直接讀取 即可,並對影象的灰度級歸一化到[0 255]。

2.對原圖進行反色得到影象b。

3.對影象b進行高斯模糊得到圖c。

4.最後將影象c與影象b進行顏色減淡的圖層混合演算法得到最後處理效果,顏色減淡的公式為:結果色 = 基色 + (混合色 * 基色) / (255 - 混合色)。

matlab實現**:

i=imread('d:/影象/fish.tif');  

figure(1);

imshow(i);

info_size=size(i);

height=info_size(1);

width=info_size(2);

n=zeros(height,width); %取反之後值

g=zeros(height,width); %濾波之後值

%灰度級歸一化到0-255

originalminvalue = double(min(min(i)));

originalmaxvalue = double(max(max(i)));

originalrange = originalmaxvalue - originalminvalue;

desiredmin = 0;

desiredmax = 255;

desiredrange = desiredmax - desiredmin;

v= desiredrange * (double(i) - originalminvalue) / originalrange + desiredmin;

gc =v(:,:,1);

channel = gc;

out=zeros(height,width);

%顏色取反

for i=1:height

for j=1:width

n(i,j)=uint8(255-channel(i,j)); %double

end

end

figure(2);

imshow(n,[0,255]);

%高斯模糊

gausize = 90; %濾波器大小,越大越模糊

gausigma = 10; %越大越模糊

gh = fspecial('gaussian', gausize, gausigma);

g = imfilter(n, gh);

figure(3);

imshow(g,[0,255]);

for i=1:height

for j=1:width

b=double(g(i,j));

a=double(channel(i,j));

temp=a+a*b/(255-b); %顏色減淡演算法

out(i,j)=uint8(min(temp,255));

end

end

figure(4)

imshow(out/255);

%模糊程度越高,得到的素描結果越清晰,框架紋理顏色越深

得到如下結果:

素描濾鏡即可實現!這個例子也可以用於影象增強方面,使中的魚骨及魚刺清晰地顯示出來。

關於編寫程式

當初選擇了文經學院,毅然決然的選擇了電腦科學與技術這個專業,說實話我也不太清楚為什麼,程式設計員大多數都是男生,作為女生的我,也想嘗試一下吧,來上課,第一次接觸程式設計,老師只是叫我們照著書打,就算是這樣,我們還是不能正確執行,粗心大意的毛病在這個時候顯現的無疑,但是卻一點沒有澆滅我對學計算機的熱情...

結伴編寫程式

form1的 using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using system...

編寫程式的步驟

編寫程式至少需要三個步驟 步驟一 確定ipo 理解ipo模式 i input 輸入,程式的輸入 包括檔案輸入 網路輸入 使用者手工輸入 隨機資料輸入 程式內部引數輸入等 輸入是乙個程式的開始 p process 處理,程式的主要邏輯 程式對輸入進行處理輸出產生結果 處理的方法也叫演算法,是程式最重要...