卷積模板的翻譯 matlab練習(xí)程序(圖像濾波時的邊界處理)
日期:2023-03-11 12:39:36 / 人氣: 526 / 發(fā)布者:成都翻譯公司
這就是圖像和模板卷積時的所有關(guān)系??此坪孟褚獙?6個if判斷,其實是不用的,我們只要判斷卷積時模板的四個邊界和圖像的四個邊界的關(guān)系就行了。自己寫的濾波時邊界處理的效果我們在編寫過濾器程序時,通常會使用矩陣模板對原始圖像進行卷積。這時候我們在處理圖像邊界時一般選擇忽略邊緣。但是如果模板比較大,處理效果會很差。它將是原始圖像,過濾后的結(jié)果在中間。雖然用Matlab的imfilter可以解決,但還是通過過濾的原理自己實踐。
模板和圖像之間共有 16 種關(guān)系。我粗略地畫了它們。前三個小矩形是模板卷積模板的翻譯,大矩形是圖像卷積模板的翻譯,*后一個是大矩形,小矩形是圖像。這就是卷積時圖像和模板之間的所有關(guān)系。
好像是寫16個if判斷,不過沒必要。我們只需要在卷積的時候判斷模板的四個邊界和圖像的四個邊界之間的關(guān)系。有兩對相對坐標(biāo),一對是圖像的卷積范圍,另一對是模板的卷積范圍。先說一下如何表達圖像的卷積范圍。如果當(dāng)前處理點為(i,j),模板大小為2*r+1(我這里使用了對稱奇數(shù)模板。如果模板的像素邊界是偶數(shù),處理起來會很困難,這里我簡單地把奇數(shù)變成偶數(shù),原理類似)。8個邊界可以這樣表示,圖像為1表示圖像的上邊緣,m表示圖像的下邊緣,1表示圖像的左邊緣,n表示圖像的右邊緣,ir表示模板的上邊緣,i+r表示模板的下邊緣,jr表示模板的左邊緣,j+r代表模板的右邊緣。通過這四對的組合,你可以擁有16種關(guān)系。有關(guān)詳細(xì)信息,請參閱下面的代碼。結(jié)合代碼看注釋更清晰。
主文件
clear all; close all; clc; r=20; w=fspecial('average',[2*r+1 2*r+1]); img=imread('lena.jpg'); img=mat2gray(img); [m n]=size(img); imshow(img); imgn=filterim(img,w); figure; imshow(mat2gray(imgn)); imgn=img; for i=r+1:m-r for j=r+1:n-r imgn(i,j)=sum(sum(img(i-r:i+r,j-r:j+r).*w)); end end figure; imshow(mat2gray(imgn)); figure; img=imfilter(img,w); imshow(mat2gray(img))
filterim.m(實現(xiàn)主要功能):
function imgn=filterim(img,w) [r r]=size(w); [m n]=size(img); if mod(r,2)==0 r=r+1; w=imresize(w,[r r]); end imgn=zeros(m,n); r=floor(r/2); for i=1:m for j=1:n %圖像需要獲得四個邊界的卷積范圍,模板只需要獲得*上面和*左面就可以了,因為圖像和模板兩個卷積范圍是一樣的。 if i-r<1 %判斷模板上邊緣和圖像上邊緣的關(guān)系 img_up=1; %如果當(dāng)前像素的高小于模板的一半,那么選擇圖像的上邊緣作為卷積圖像的上邊緣 mark_up=r-i+1; %模板的上邊緣使用和圖像相交的上邊緣 else img_up=i-r; %使用當(dāng)前像素的高減去模板的一半作為卷積圖像的上邊緣 mark_up=1; %使用模板的*上邊緣作為卷積模板的上邊緣 end if i+r>m %判斷模板下邊緣和圖像下邊緣的關(guān)系 img_down=m; %如果當(dāng)前像素的高加上模板的一半超過整個圖像的高,那么卷積圖像的下邊緣使用整個圖像的下邊緣 else img_down=i+r; %否則卷積圖像的下邊緣使用當(dāng)前像素的高加上模板的一半 end if j-r<1 %判斷模板左邊緣和圖像左邊緣的關(guān)系 img_left=1; %如果當(dāng)前像素的寬小于模板的一半,那么選擇圖像的左邊緣作為卷積圖像的左邊緣 mark_left=r-j+1; %模板的左邊緣使用和圖像相交的左邊緣 else img_left=j-r; %使用當(dāng)前像素的寬減去模板的一半作為卷積圖像的左邊緣 mark_left=1; %使用模板的*左邊緣作為卷積模板的左邊緣 end if j+r>n %判斷模板右邊緣和圖像右邊緣的關(guān)系 img_right=n; %如果當(dāng)前像素的寬加上模板的一般超過整個圖像的寬,那么卷積圖像的右邊緣使用整個圖像的右邊緣 else img_right=j+r; %否則卷積圖像的右邊緣使用當(dāng)前像素的寬加上模板的一半 end imgn(i,j)=sum(sum(img(img_up:img_down,img_left:img_right).*w(mark_up:mark_up+(img_down-img_up),mark_left:mark_left+(img_right-img_left))));%/((img_down-img_up+1)*(img_right-img_left+1)); %卷積圖像上邊緣:下邊緣,左邊緣:右邊緣 %卷積模板上邊緣:上邊緣+(豎直卷積范圍),卷積模板左邊緣:左邊緣+(水平卷積范圍) end end end
說實話,寫這篇評論我很糾結(jié)。我已經(jīng)盡力把評論寫清楚了,雖然我還是覺得沒有解釋清楚。我真的需要鍛煉我的寫作和表達能力。
下面是渲染圖:
原圖
自己過濾時邊界處理的效果
無邊界處理的通常效果
Matlab函數(shù)處理結(jié)果
我的效果基本接近matlab自帶的效果,但是速度好像慢了很多。matlab自帶的函數(shù)可以用匯編來處理。總之,算法是這樣的。
相關(guān)閱讀Relate
熱門文章 Recent
- 證件德語翻譯模板 杭州專業(yè)蘇丹駕照駕駛證駕駛本翻譯公司2023-03-11
- 簽證北京房本翻譯模板 辦美國簽證時,所有的材料都要翻譯成英文嗎?2023-03-11
- 俄亥俄州駕照翻譯模板 中國駕照可以到美國開車呢2023-03-11
- 翻譯后的計算機化系統(tǒng)驗證模板 計算機化系統(tǒng)驗證常見的2023-03-11
- 營業(yè)執(zhí)照副本復(fù)印件翻譯模板 工商營業(yè)執(zhí)照翻譯2023-03-11
- 大學(xué)成績單法語翻譯模板 2017年法語詩歌翻譯大賽半決賽_2017年法語事業(yè)編招聘2023-03-11
- 就業(yè)協(xié)議書模板翻譯 關(guān)于高校畢業(yè)生就業(yè)協(xié)議書等有關(guān)就業(yè)證明材料的說明2023-03-11
- 模板庫翻譯 服務(wù)端模板注入:現(xiàn)代WEB遠程代碼執(zhí)行(補充翻譯和擴展)2023-03-11
- 西班牙語翻譯簡歷模板-trycan翻譯平臺2023-03-11
- 親屬關(guān)系公證翻譯模板 親屬關(guān)系證明樣本2023-03-11