matlab调和均值滤波_中值和均值滤波---matlab实现
%x是需要濾波的圖像,n是模板大小(即n×n)
function d=avg_filter(x,n)
a(1:n,1:n)=1; %a即n×n模板,元素全是1
[height, width]=size(x); %輸入圖像是hightxwidth的,且hight>n,width>n
x1=double(x);
x2=x1;
for i=1:hight-n+1
for j=1:width-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);
%自編的中值濾波函數。x是需要濾波的圖像,n是模板大小(即n×n)
function d=mid_filter(x,n)
[height, width]=size(x); %輸入圖像是p×q的,且p>n,q>n
x1=double(x);
x2=x1;
for i=1:height-n+1
for j=1:height-n+1
c=x1(i:i+(n-1),j:j+(n-1)); %取出x1中從(i,j)開始的n行n列元素,即模板(n×n的)
e=c(1,:); %是c矩陣的第一行
for u=2:n
e=[e,c(u,:)]; %將c矩陣變為一個行矩陣
end
mm=median(e); %mm是中值
x2(i+(n-1)/2,j+(n-1)/2)=mm; %將模板各元素的中值賦給模板中心位置的元素
end
end
%未被賦值的元素取原值
d=uint8(x2);
%自編的高斯濾波函數,S是需要濾波的圖象,n是均值,k是方差
function d=gaussfilt(k,n,s)
Img = double(s);
n1=floor((n+1)/2);%計算圖象中心
for i=1:n
for j=1:n
b(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*k))/(4*pi*k);
end
end
%生成高斯序列b。
Img1=conv2(Img,b,'same'); %用生成的高斯序列卷積運算,進行高斯濾波
d=uint8(Img1);
(5) 中值濾波的MATLAB代碼
global ImagenUmbral %定義一個全局變量ImagenUmbral
global J %使用全局變量J
A=J %將J賦給A
[m,n] = size(A); %測量圖像尺寸參數
B=A; %將A賦給B
pixel_block = zeros(1,9); %開辟一個一行九列的數組,均賦于初值0
for i = 2:m-1 %對A中的各個像素點(不包括邊界)
for j = 2:n-2
pixel_block = reshape(A(i-1:i+1,j-1:j+1),9,1); %采用3*3的窗口,將一個像素點及其周圍的8各點,依次存入新開辟的數組pixel_block中
sorted_block = sort(pixel_block); %將數組pixel_block排序
block_median = sorted_block(5); %將數
總結
以上是生活随笔為你收集整理的matlab调和均值滤波_中值和均值滤波---matlab实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VGG16网络结构图及pytorch 代
- 下一篇: C语言入门20个简单程序|最新更新202