導航:首頁 > 源碼編譯 > 均值濾波的演算法實現步驟

均值濾波的演算法實現步驟

發布時間:2022-07-09 06:06:40

Ⅰ 這是pic單片機加權平均值濾波 這幾個數是怎麼運算的 我想知道運算步驟和結果

看主程序:
void main(void)
{
while(1)
{
temp=filter(); //加權平均值濾波
printf("%d\n",temp);
TX_temp(); //未知,可能是串口發送
}
}

主要是這部分
char filter()
{
char i;
char value_buf[N];
int sum=0;
for(i=0;i<N;i++) //這個for循環把table中的值賦給value_buf數組
{
value_buf[i]=table[i]; //其實就是 value_buf[4]={10,20,30,65};
delay(500); /不知為何要加延時,本人感覺/毫無意義浪費cpu
}
for(i=0;i<N;i++) //關鍵部分 sum=10*1+20*2+30*3+40*4
sum+=value_buf[i]*mul[i];
return (char)(sum/sum_mul); //返回(10*1+20*2+30*3+40*4)/sum_mul,整數部分
}
這部分代碼沒什麼用,就做了一個簡單的運算,加權平均值濾波演算法如下:
/*
* 輸入 參數:1.需處理數組首地址
* 2.權數組首地址(暫且用power_buf,英文不行)
* 3.數組長度
*/
int filter(char *dat_buf_p, char *power_buf_p, char buf_num)
{
int sum=0;

int sum_mul=0;
for(char i=0; i<buf_num; i++)

{
sum+=(*dat_buf_p)*(*power_buf_p); //數組*權值

sum_mul+=*power_buf_p; //生成權值和
dat_buf_p++; //數組指針加一,指向數組中下一個數
power_buf_p++; //權數組指針加一,指向權數組中下一個權
}
return (int)(sum/ sum_mul);
}
你試試這個函數,有問題跟我說。

Ⅱ 均值濾波的介紹

均值濾波是典型的線性濾波演算法,它是指在圖像上對目標像素給一個模板,該模板包括了其周圍的臨近像素(以目標象素為中心的周圍8個像素,構成一個濾波模板,即去掉目標像素本身),再用模板中的全體像素的平均值來代替原來像素值。

Ⅲ 計算3x3窗口的均值濾波和中值濾波(向下取整保留整數值)。

均值濾波和中值濾波屬於空域圖像增強的處理方法,均值濾波去麻點,中值濾波保邊緣。

要進行均值濾波首先要生成一個3x3矩陣。演算法運算窗口一般採用奇數點的鄰域來計算中值,最常用的窗口有3X3和5X5模型。

1、通過2個或者3個RAM的存儲來實現3X3像素窗口。

2、通過2個或者3個FIFO的存儲來實現3X3像素窗口。

3、通過2行或者3行Shift_RAM的存儲來實現3X3像素窗口。

(3)均值濾波的演算法實現步驟擴展閱讀:

注意事項:

1、空間域指圖像本身,空域變換直接對圖像中的像素進行操作。

2、在進行橫向滑動窗口濾波時,窗口中的像素僅僅是丟掉了左側一列,增加了右側一列數據,如果丟掉中間重疊的這一部分數據,到下個窗口再重新定址和讀取數據,無疑是計算的沉重負擔,所以該演算法的核心思想就是充分利用重疊部分,使用直方圖來計算中值,不需要排序演算法,快,且高效。

3、注意到兩個直方圖的累加是一個O(1)操作,和直方圖的元素個數有關,而直方圖元素個數是由圖像位深決定的。

Ⅳ 怎樣用Matlab循環編程實現均值濾波演算法,採用3*3的窗口

隨便寫了一個方法,沒優化,運行速度有點慢。對於圖像范圍邊界,只跟圖像內部點做均值。
clear
all
clc
A=imread('manuo1.jpg');
A=im2double(A);
subplot(1,2,1)
imshow(A);
[line,row]=size(A);
lines=0;
rows=0;
linee=0;
rowe=0;
temp=0;
B=[];
for
i=1:1:line
for
j=1:1:row
lines=i-1;
linee=i+1;
rows=j-1;
rowe=j+1;
if
i==1
lines=1;
linee=2;
end
if
i==line
lines=line-1;
linee=line;
end
if
j==1
rows=1;
rowe=2;
end
if
j==row
rows=row-1;
rowe=row;
end
temp=0;
for
m=lines:1:linee
for
n=rows:1:rowe
temp=temp+A(m,n);
end
end
B(i,j)=temp/((linee-lines+1)*(rowe-rows+1));
end
end
subplot(1,2,2)
imshow(B);

Ⅳ 用MATLAB編程實現均值濾波演算法

1:smoothingAverageFilterMain.mclc;clear;fid = fopen('lenai.raw');temp= fread(fid, [256,256]);LenaRaw=uint8(temp');subplot(1,2,1) Imshow(LenaRaw);title('原始圖像')subplot(1,2,2) Imshow(smoothingAverageFilter(LenaRaw,3));title('自製函數,使用用3*3模板,均值濾波圖像')2:smoothingAverageFilter.mfunction returnData=smoothingAverageFilter(arg,arg2)[Iwidth,Ilength]=size(arg);temp=double(arg);returnData=zeros(Iwidth,Ilength);totalLength=arg2*arg2;for i=1:Iwidth-arg2+1 for j=1:Ilength-arg2+1 % temp(i,j)=average(arg(i:i+arg2,j:j+arg2)); sum=0.0; for n=1:arg2 for k=1:arg2 sum=sum+temp(i+n-1,j+k-1); end end returnData(i,j)=sum/totalLength; endendreturnData=uint8(returnData);end

Ⅵ 均值濾波怎麼算的

均值濾波是典型的線性濾波演算法,它是指在圖像上對目標像素給一個模板,該模板包括了其周圍的臨近像素(以目標象素為中心的周圍8個像素,構成一個濾波模板,即去掉目標像素本身),再用模板中的全體像素的平均值來代替原來像素值。均值濾波是典型的線性濾波演算法,它是指在圖像上對目標像素給一個模板,該模板包括了其周圍的臨近像素(以目標像素為中心的周圍8個像素,構成一個濾波模板,即去掉目標像素本身)。再用模板中的全體像素的平均值來代替原來像素值。均值濾波也稱為線性濾波,其採用的主要方法為鄰域平均法。線性濾波的基本原理是用均值代替原圖像中的各個像素值,即對待處理的當前像素點(x,y),選擇一個模板,該模板由其近鄰的若干像素組成,求模板中所有像素的均值,再把該均值賦予當前像素點(x,y),作為處理後圖像在該點上的灰度個g(x,y),即個g(x,y)=1/m ∑f(x,y) m為該模板中包含當前像素在內的像素總個數。均值濾波本身存在著固有的缺陷,即它不能很好地保護圖像細節,在圖像去噪的同時也破壞了圖像的細節部分,從而使圖像變得模糊,不能很好地去除雜訊點。

Ⅶ 怎樣用MATLAB實現中值和均值濾波

中值濾波樓上答了,5*5的均值濾波代碼 w2=fspecial('average',[5 5]); %% 先定義一個濾波器 h=imfilter(a,w2,'replicate'); %%讓圖像通過濾波器 imshow(h); imwrite(h,'8.jpg');
均值濾波是
I=medfilt2(a,[3 3],'symmetric')
可以在matlab中查詢medfilt函數的用法,本例是使用3*3的濾波器採用鏡像邊界法做均值濾波。

Ⅷ 編寫用均值濾波去噪的matlab程序,用兩種方法實現.(重謝)

1、雙循環語句,移動平均法。

<p>雙循環語句,移動平均法</p> <p>%均值濾波</p>

<p>clc,clear;</p>

<p>f=imread('lena.bmp');</p>

<p>subplot(121),imshow(f),title('原圖');</p>

<p>f1=imnoise(f,'gaussian',0.002,0.0008);</p>

<p>%subplot(222),imshow(f1),title('添加高斯雜訊圖');</p>

<p>k1=floor(3/2)+1;</p>

<p>k2=floor(3/2)+1;</p> <p>X=f1;</p>

<p>[M,N]=size(X);</p> <p>uint8Y=zeros(M,N);</p>

<p>funBox=zeros(3,3);</p> <p>fori=1:M-3</p>

<p>forj=1:N-3</p> <p>funBox=X(i:i+3,j:j+3);</p>

<p>s=sum(funBox(:));</p> <p>h=s/9;</p>

<p>Y(i+k1,j+k2)=h;</p> <p>end;</p>

<p>end;</p> <p>Y=Y/255;</p>

<p>subplot(122),imshow(Y),title('均值濾波');</p>

<p>實現圖:</p>

2、filter2。

<p>filter2</p>

<p>clearall;</p>

<p>I=imread('lena.bmp');</p>

<p>%讀入預處理圖像</p>

<p>imshow(I)</p> <p>%顯示預處理圖像</p>

<p>K1=filter2(fspecial('average',3),I)/255;</p> <p>%進行3*3均值濾波</p>

<p>K2=filter2(fspecial('average',5),I)/255;</p> <p>%進行5*5均值濾波</p>

<p>K3=filter2(fspecial('average',7),I)/255;</p> <p>%進行7*7均值濾波</p>

<p>figure,imshow(K1)</p> <p>figure,imshow(K2)</p>

<p>figure,imshow(K3)</p>

Ⅸ MATLAB中編寫均值濾波的程序

imageData(y,x,1) = (sum (y1,x1,1))/9;
imageData(y,x,2) = (sum (y1,x1,2))/9;
imageData(y,x,3) = (sum (y1,x1,3))/9;
這一部分沒有進行求和的操作啊,根本沒有imageData這個量。。。if後邊的循環沒有實現對3*3的塊求和,而是每次賦一個值而已。還有for後邊不能加分號,if後邊不能加分號,1<x<imageWidth這種語句盡量分成兩句:x>1 && x<imageWidth。另建議新建一個矩陣進行存儲,可修改如下:
imageData = imread ('file.png');
imageSize = size(imageData);
imageHeight = imageSize(1);
imageWidth = imageSize(2);
Result = imageData;
for y = 1:imageHeight
for x = 1:imageWidth
if (y>1 && y <imageHeight && x>1 && x < imageWidth)
Result(y,x,1) = sum(sum(imageData(y-1:y+1,x-1:x+1,1)))/9;
Result(y,x,2) = sum(sum(imageData(y-1:y+1,x-1:x+1,2)))/9;
Result(y,x,3) = sum(sum(imageData(y-1:y+1,x-1:x+1,3)))/9;
end
end
end
imwrite (Result,'final.png');
有問題可以繼續問我,望採納~

閱讀全文

與均值濾波的演算法實現步驟相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:579
python員工信息登記表 瀏覽:377
高中美術pdf 瀏覽:161
java實現排列 瀏覽:513
javavector的用法 瀏覽:982
osi實現加密的三層 瀏覽:233
大眾寶來原廠中控如何安裝app 瀏覽:916
linux內核根文件系統 瀏覽:243
3d的命令面板不見了 瀏覽:526
武漢理工大學伺服器ip地址 瀏覽:149
亞馬遜雲伺服器登錄 瀏覽:525
安卓手機如何進行文件處理 瀏覽:71
mysql執行系統命令 瀏覽:930
php支持curlhttps 瀏覽:143
新預演算法責任 瀏覽:444
伺服器如何處理5萬人同時在線 瀏覽:251
哈夫曼編碼數據壓縮 瀏覽:426
鎖定伺服器是什麼意思 瀏覽:385
場景檢測演算法 瀏覽:617
解壓手機軟體觸屏 瀏覽:350