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

均值濾波演算法實現

發布時間:2023-05-30 13:02:23

Ⅰ 用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

Ⅱ 編寫用均值濾波去噪的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>

Ⅲ 滑動平均濾波演算法

value_buf可以理解為循環隊列,裡面的數據不斷由AD采樣值來更新。每讀到一個新AD值,value_buf先更新再求平均。程序中有兩個小錯誤,但思想是對的。
if(i==N) i=0;
sum +=value_buf[count];

Ⅳ 求均值濾波和中值濾波演算法的MATLAB代碼

5*5的均值濾波代碼
w2=fspecial('average',[5 5]); %% 先定義一個濾波器
h=imfilter(a,w2,'replicate'); %%讓圖像通過濾波器
imshow(h);
imwrite(h,'8.jpg');
中值的暫時還不會

Ⅳ 怎樣用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);

Ⅵ 均值濾波,中值濾波和高斯濾波的異同

高斯濾波
由於高斯函數的派鋒傅立葉變換仍是高斯函數, 因此高斯函數能構成一個在頻域具有平滑性能的低通濾波器。可以通過在頻域做乘積來實現高斯濾波。均值濾波是對是對信號進行局部平均, 以平均值來代表該像素點的灰度值。矩形濾波器(Averaging Box Filter)對這個二維矢量的每一個分量進行獨立的平滑處理。通過計算和轉化 ,得到一幅單位矢量圖。這個 512×512的矢量圖被劃分成一個 8×8的小區域 ,再在每一個小區域中 ,統計這個區域內的主要方向 ,亦即將對該區域內點方向數進行統計,最多的方向作為區域的主方向。於是就得到了一個新的64×64的矢量圖。這個新的矢量圖還基汪可以採用一個 3×3模板進行進一步的平滑。

均值濾波
把每個像素都用周圍的8個像素來做均值操作。可以平滑圖像,速度快,演算法簡單。但是無法去掉雜訊,這能微弱的減弱它。

中值濾波
常用的非線性濾波方法 ,也是圖像處理技術中最常用的預處理技術。它在平滑脈沖雜訊方面非常有效,同時它可以保護圖像尖銳的邊緣。加權中值濾塵鋒晌波能夠改進中值濾波的邊緣信號保持效果。但對方向性很強的指紋圖像進行濾波處理時 ,有必要引入方向信息,即利用指紋方向圖來指導中值濾波的進行。

最小均方差濾波器
亦稱維納濾波器,其設計思想是使輸入信號乘響應後的輸出,與期望輸出的均方誤差為最小。

Gabor濾波
Gabor變換是英國物理學家 Gabor提出來的,由「測不準原理」可知,它具有最小的時頻窗,即Gabor函數能做到具有最精確的時間-頻率的局部化;另外, Gabor函數與哺乳動物的視覺感受野相當吻合,這一點對研究圖像特徵檢測或空間頻率濾波非常有用。恰當的選擇其參數, Gabor變換可以出色地進行圖像分割、識別與理解。如文獻提出的基於Gabor濾波器的增強演算法。

Ⅶ 滑動平均值濾波法 用西門子 S7-200 plc編程,要求有程序注釋

不需昌嘩衫要這樣做的!把擾源幹掉就行!如果實面蘆扮需要濾波!可以勾選,一般情耐腔況下並不需要!

Ⅷ MATLAB高手請幫幫小弟 現有MATLAB難題如下:

對圖像加入高斯白雜訊,參考以下函數:
AWGN:在某一信號中加入高斯白雜訊
y = awgn(x,SNR) 在信號x中加入高斯白雜訊。信噪比SNR以dB為單位。x的強度假定為0dBW。如果x是復數,就加入復雜訊。
y = awgn(x,SNR,SIGPOWER) 如果SIGPOWER是數值,則其代表以dBW為單位的信號強度;如果SIGPOWER為'measured',則函數將在加入雜訊之前測定信號強度。
y = awgn(x,SNR,SIGPOWER,STATE) 重置RANDN的狀態。
y = awgn(…,POWERTYPE) 指定SNR和SIGPOWER的單位。POWERTYPE可以是'dB'或'linear'。辯搏如果POWERTYPE是'頃灶喚dB',那麼SNR以dB為單位,而SIGPOWER以dBW為單位。如果POWERTYPE是'linear',那麼SNR作為比值來度量,而SIGPOWER以瓦特為單位。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%自編的均值濾波函數。x是需要濾波的圖像,n是模板大小(即n×n)
function d=avefilt(x,n)
a(1:n,1:n)=1; %a即n×n模板,元素全是1
p=size(x); %輸入圖像是p×q的,且p>n,q>n
x1=double(x);
x2=x1;
%A(a:b,c:d)表示A矩陣的第a到b行,第c到d列的所有元素
for i=1:p(1)-n+1
for j=1:p(2)-n+1
c=x1(i:i+(n-1),j:j+(n-1)).*a; %取出x1中從(i,j)開始的n行n列元素與模板相乘
s=sum(sum(c)); %求c矩陣(即模板)中各元素之和
x2(i+(n-1)/2,j+(n-1)/2)=s/(n*n); %將模板各元素的均值賦給模板中心位置的元素
end
end
%未被賦值的元素取原值
d=uint8(x2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
HCM是硬C均值演算法,FCM為模糊C均值演算法,由HCM發展而來。雀凱
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [center, U, obj_fcn] = FCMClust(data, cluster_n, options)
% FCMClust.m 採用模糊C均值對數據集data聚為cluster_n類
%
% 用法:
% 1. [center,U,obj_fcn] = FCMClust(Data,N_cluster,options);
% 2. [center,U,obj_fcn] = FCMClust(Data,N_cluster);
%
% 輸入:
% data ---- nxm矩陣,表示n個樣本,每個樣本具有m的維特徵值
% N_cluster ---- 標量,表示聚合中心數目,即類別數
% options ---- 4x1矩陣,其中
% options(1): 隸屬度矩陣U的指數,>1 (預設值: 2.0)
% options(2): 最大迭代次數 (預設值: 100)
% options(3): 隸屬度最小變化量,迭代終止條件 (預設值: 1e-5)
% options(4): 每次迭代是否輸出信息標志 (預設值: 1)
% 輸出:
% center ---- 聚類中心
% U ---- 隸屬度矩陣
% obj_fcn ---- 目標函數值
% Example:
% data = rand(100,2);
% [center,U,obj_fcn] = FCMClust(data,2);
% plot(data(:,1), data(:,2),'o');
% hold on;
% maxU = max(U);
% index1 = find(U(1,:) == maxU);
% index2 = find(U(2,:) == maxU);
% line(data(index1,1),data(index1,2),'marker','*','color','g');
% line(data(index2,1),data(index2,2),'marker','*','color','r');
% plot([center([1 2],1)],[center([1 2],2)],'*','color','k')
% hold off;

if nargin ~= 2 & nargin ~= 3, %判斷輸入參數個數只能是2個或3個
error('Too many or too few input arguments!');
end

data_n = size(data, 1); % 求出data的第一維(rows)數,即樣本個數
in_n = size(data, 2); % 求出data的第二維(columns)數,即特徵值長度
% 默認操作參數
default_options = [2; % 隸屬度矩陣U的指數
100; % 最大迭代次數
1e-5; % 隸屬度最小變化量,迭代終止條件
1]; % 每次迭代是否輸出信息標志

if nargin == 2,
options = default_options;
else %分析有options做參數時候的情況
% 如果輸入參數個數是二那麼就調用默認的option;
if length(options) < 4, %如果用戶給的opition數少於4個那麼其他用默認值;
tmp = default_options;
tmp(1:length(options)) = options;
options = tmp;
end
% 返回options中是數的值為0(如NaN),不是數時為1
nan_index = find(isnan(options)==1);
%將denfault_options中對應位置的參數賦值給options中不是數的位置.
options(nan_index) = default_options(nan_index);
if options(1) <= 1, %如果模糊矩陣的指數小於等於1
error('The exponent should be greater than 1!');
end
end
%將options 中的分量分別賦值給四個變數;
expo = options(1); % 隸屬度矩陣U的指數
max_iter = options(2); % 最大迭代次數
min_impro = options(3); % 隸屬度最小變化量,迭代終止條件
display = options(4); % 每次迭代是否輸出信息標志

obj_fcn = zeros(max_iter, 1); % 初始化輸出參數obj_fcn

U = initfcm(cluster_n, data_n); % 初始化模糊分配矩陣,使U滿足列上相加為1,
% Main loop 主要循環
for i = 1:max_iter,
%在第k步循環中改變聚類中心ceneter,和分配函數U的隸屬度值;
[U, center, obj_fcn(i)] = stepfcm(data, U, cluster_n, expo);
if display,
fprintf('FCM:Iteration count = %d, obj. fcn = %f\n', i, obj_fcn(i));
end
% 終止條件判別
if i > 1,
if abs(obj_fcn(i) - obj_fcn(i-1)) < min_impro,
break;
end,
end
end

iter_n = i; % 實際迭代次數
obj_fcn(iter_n+1:max_iter) = [];

% 子函數
function U = initfcm(cluster_n, data_n)
% 初始化fcm的隸屬度函數矩陣
% 輸入:
% cluster_n ---- 聚類中心個數
% data_n ---- 樣本點數
% 輸出:
% U ---- 初始化的隸屬度矩陣
U = rand(cluster_n, data_n);
col_sum = sum(U);
U = U./col_sum(ones(cluster_n, 1), :);

% 子函數
function [U_new, center, obj_fcn] = stepfcm(data, U, cluster_n, expo)
% 模糊C均值聚類時迭代的一步
% 輸入:
% data ---- nxm矩陣,表示n個樣本,每個樣本具有m的維特徵值
% U ---- 隸屬度矩陣
% cluster_n ---- 標量,表示聚合中心數目,即類別數
% expo ---- 隸屬度矩陣U的指數
% 輸出:
% U_new ---- 迭代計算出的新的隸屬度矩陣
% center ---- 迭代計算出的新的聚類中心
% obj_fcn ---- 目標函數值
mf = U.^expo; % 隸屬度矩陣進行指數運算結果
center = mf*data./((ones(size(data, 2), 1)*sum(mf'))'); % 新聚類中心(5.4)式
dist = distfcm(center, data); % 計算距離矩陣
obj_fcn = sum(sum((dist.^2).*mf)); % 計算目標函數值 (5.1)式
tmp = dist.^(-2/(expo-1));
U_new = tmp./(ones(cluster_n, 1)*sum(tmp)); % 計算新的隸屬度矩陣 (5.3)式

% 子函數
function out = distfcm(center, data)
% 計算樣本點距離聚類中心的距離
% 輸入:
% center ---- 聚類中心
% data ---- 樣本點
% 輸出:
% out ---- 距離
out = zeros(size(center, 1), size(data, 1));
for k = 1:size(center, 1), % 對每一個聚類中心
% 每一次循環求得所有樣本點到一個聚類中心的距離
out(k, :) = sqrt(sum(((data-ones(size(data,1),1)*center(k,:)).^2)',1));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
調用完FCM後,得到的U矩陣就是聚類結果,然後根據U矩陣對原圖像進行賦值,即可得到分割結果。

Ⅸ 3×3的均值濾波怎麼算

答案:3×3的均值濾如拍波可以通過將每個像素周圍的8個像素和自己的灰度值相加,再除以9來計算。即新像素的灰度值等於周圍9個像素的灰度值之和除以9。
解釋:均值濾波是一種基本的圖像處理方法,用於去除圖像中的雜訊和平滑圖像。在3×3的均值濾波中,每個像素周圍的8個像素和自己的灰度值相加,再除以9,得到新像素的灰度值。這種方法可以平滑圖像並減少圖像中的雜訊。
拓展:均值濾波是一種非培廳常基本的圖像處理方法,但它有一些缺點。例如,它不能處理圖像中的邊緣,因為它只考慮像素周圍的像素。此外,它可能會使圖像變得模糊,因為它平均了像素的灰度值。因此,在實際應用中,可以配橡隱使用其他更高級的濾波方法來處理圖像。

Ⅹ 均值濾波

一. 均值濾波簡介和原理

     晌扒   均值濾波,是圖像處理中常用的手段,從頻率域觀點來看均值濾波是一種低通濾波器,高頻信號將會去掉。均值濾波可以幫助消除圖像尖銳雜訊,實現圖像平滑,模糊等功能。理想的均值濾波是用每個像素和它周圍像素計算出來歲蠢的平均值替換圖像中每個像素。

        以3*3均值濾波器為例,均值濾波器演算法宴雀昌原理如下圖:

二. 用均值濾波器對椒鹽雜訊污染後的圖像去噪

        python 源碼

import cv2

import numpy as np

# mean filter

def mean_filter(img, K_size=3):

    H, W, C = img.shape

    # zero padding

    pad = K_size // 2

    out = np.zeros((H + pad * 2, W + pad * 2, C), dtype=np.float)

    out[pad: pad + H, pad: pad + W] = img.().astype(np.float)

    tmp = out.()

    # filtering

    for y in range(H):

        for x in range(W):

            for c in range(C):

                out[pad + y, pad + x, c] = np.mean(tmp[y: y + K_size, x: x + K_size, c])

    out = out[pad: pad + H, pad: pad + W].astype(np.uint8)

    return out

# Read image

img = cv2.imread("../paojie_sp1.jpg")

# Mean Filter

out = mean_filter(img, K_size=5)

# Save result

cv2.imwrite("out.jpg", out)

cv2.imshow("result", out)

cv2.waitKey(0)

cv2.destroyAllWindows()

三. 實驗結果:

        可以看到,均值濾波後,圖像中雜訊雖然有所減弱,但是圖像變模糊了。因為均值濾波器過濾掉了圖像中的高頻分量,所以圖像的邊緣都變模糊了。(去除一定量椒鹽雜訊,可以考慮使用中值濾波)

四. 參考內容:

        https://www.cnblogs.com/wojianxin/p/12501891.html

閱讀全文

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

熱點內容
伺服器怎麼用不會斷電 瀏覽:301
主從伺服器有什麼用 瀏覽:213
jstlpdf 瀏覽:14
安卓原神在哪個app下載 瀏覽:808
單片機編程技術什麼意思 瀏覽:104
e點課堂源碼 瀏覽:45
免費打擊墊app哪個好 瀏覽:532
程序員必裝的6款軟體 瀏覽:750
基於單片機的遙控器設計 瀏覽:521
安卓如何取消圓圖標 瀏覽:11
收件伺服器怎麼樣 瀏覽:48
建築設計規范pdf 瀏覽:98
如何合並兩個pdf 瀏覽:174
刷機包必須要解壓的單詞 瀏覽:483
android課表實現 瀏覽:864
頭條app在哪裡能看見有什麼活動 瀏覽:511
冰櫃壓縮機電容80歐 瀏覽:609
安卓各個版本圖標什麼樣 瀏覽:152
無錫哪裡有製作手機app 瀏覽:538
php字元串轉json數組 瀏覽:6