A=imread('images.jpg');%A:读取图像
r=2; %r:半径
T=10; %T:阈值
w=zeros(2*r+1,2*r+1); %模板矩阵的尺寸
%图像初始化处理
figure,imshow(A);title("原图");
% img=rgb2gray(A); %源图片转灰度图
%
% img=double(img); %转为矩阵
R=double(A(:,:,1));
G=double(A(:,:,2));
B=double(A(:,:,3));
%解决边界值问题
[m,n]=size(R);
imgn=zeros(m+2*r,n+2*r); %创建一个长宽各增加[2r]的扩容矩阵
imgn(r+1:r+m,r+1:r+n)=R;
imgn(1:r,r+1:r+n)=R(1:r,1:n); %上边界填充
imgn(1:m+r,n+r+1:n+2*r)=imgn(1:m+r,n+1:n+r); %右边界填充
imgn(m+r+1:m+2*r,r+1:n+2*r)=imgn(m+1:m+r,r+1:n+2*r); %下边界填充
imgn(1:m+2*r,1:r)=imgn(1:m+2*r,r+1:2*r); %左边界填充
[m1,n1]=size(G);
imgn1=zeros(m1+2*r,n1+2*r); %创建一个长宽各增加[2r]的扩容矩阵
imgn1(r+1:r+m1,r+1:r+n1)=G;
imgn1(1:r,r+1:r+n1)=G(1:r,1:n1); %上边界填充
imgn1(1:m1+r,n1+r+1:n1+2*r)=imgn1(1:m1+r,n1+1:n1+r); %右边界填充
imgn1(m1+r+1:m1+2*r,r+1:n1+2*r)=imgn1(m1+1:m1+r,r+1:n1+2*r); %下边界填充
imgn1(1:m1+2*r,1:r)=imgn1(1:m1+2*r,r+1:2*r); %左边界填充
[m2,n2]=size(B);
imgn2=zeros(m2+2*r,n2+2*r); %创建一个长宽各增加[2r]的扩容矩阵
imgn2(r+1:r+m2,r+1:r+n2)=B;
imgn2(1:r,r+1:r+n2)=B(1:r,1:n2); %上边界填充
imgn2(1:m2+r,n2+r+1:n2+2*r)=imgn2(1:m2+r,n2+1:n+r); %右边界填充
imgn2(m2+r+1:m2+2*r,r+1:n2+2*r)=imgn2(m2+1:m2+r,r+1:n2+2*r); %下边界填充
imgn2(1:m2+2*r,1:r)=imgn2(1:m2+2*r,r+1:2*r); %左边界填充
%开始计算每个像素,共计算m*n次
for i=r+1:r+m
for j=r+1:r+n %遍历imgn 中部的源img部分
%计算式子的分母
w=1-abs(imgn(i-r:i+r,j-r:j+r)-imgn(i,j))/(2.5*T); %w是一个以img中的元素为核心,size=[2r+1][2r+1]的矩阵,这样的模板会计算m*n次
%灰度值溢出检查
for p=1:2*r+1
for q=1:2*r+1
if w(p,q) <=0
w(p,q)=0;
end
end
end
%计算式子的分子
s=w.*imgn(i-r:i+r,j-r:j+r);
%计算总式
imgn(i,j)=sum(sum(s))/sum(sum(w)); %一个sum()对一维数组求和,sum(sum())就是对二维矩阵求和
end
end
for i=r+1:r+m1
for j=r+1:r+n1 %遍历imgn 中部的源img部分
%计算式子的分母
w1=1-abs(imgn1(i-r:i+r,j-r:j+r)-imgn1(i,j))/(2.5*T); %w是一个以img中的元素为核心,size=[2r+1][2r+1]的矩阵,这样的模板会计算m*n次
%灰度值溢出检查
for p=1:2*r+1
for q=1:2*r+1
if w1(p,q) <=0
w1(p,q)=0;
end
end
end
%计算式子的分子
s1=w1.*imgn1(i-r:i+r,j-r:j+r);
%计算总式
imgn1(i,j)=sum(sum(s1))/sum(sum(w1)); %一个sum()对一维数组求和,sum(sum())就是对二维矩阵求和
end
end
for i=r+1:r+m2
for j=r+1:r+n2 %遍历imgn 中部的源img部分
%计算式子的分母
w2=1-abs(imgn2(i-r:i+r,j-r:j+r)-imgn2(i,j))/(2.5*T); %w是一个以img中的元素为核心,size=[2r+1][2r+1]的矩阵,这样的模板会计算m*n次
%灰度值溢出检查
for p=1:2*r+1
for q=1:2*r+1
if w2(p,q) <=0
w2(p,q)=0;
end
end
end
%计算式子的分子
s2=w2.*imgn2(i-r:i+r,j-r:j+r);
%计算总式
imgn2(i,j)=sum(sum(s2))/sum(sum(w2)); %一个sum()对一维数组求和,sum(sum())就是对二维矩阵求和
end
end
img=imgn(r+1:r+m,r+1:r+n); %从imgn截取出源img部分
img1=imgn1(r+1:r+m1,r+1:r+n1); %从imgn截取出源img部分
img2=imgn2(r+1:r+m2,r+1:r+n2); %从imgn截取出源img部分
res=cat(3,img,img1,img2);
figure,imshow(uint8(res));title("SurfaceBlur算法后");

NeoEvolution
- 粉丝: 519
最新资源
- 综合布线系统工程的投标.doc
- 数据结构(C语言版)-期末复习汇总.doc
- (精品)继续教育专业技术人员网络安全建设和网络社会治理答案.doc
- 电子商务专业实习报告.docx
- (源码)基于LoRa通信协议的公共交通监控系统.zip
- 用条码标签打印软件打印实时日期.pdf
- 用友电子商务解决方案BC商城标准版-V2.ppt
- 微博营销-新型网络营销工具.pptx
- 计算机科学导论第一章绪论演稿.ppt
- (源码)基于Kosagi Novena母板的电路板设计项目.zip
- (源码)基于C语言的可变参数调用库系统.zip
- (源码)基于Python的分类模型项目.zip
- 借助百度AI 实现文字识别,语音识别,图像识别等等
- (源码)基于微信小程序的闪视数据可视化系统.zip
- (源码)基于ROS 2框架的机器人手臂遥控系统.zip
- (源码)基于Arduino IDE的水质监测系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


