matlab除杂质阴影边缘除瑕疵提取轮廓

简介: matlab除杂质阴影边缘除瑕疵提取轮廓

文章目录


处理图片:

image.png

主代码:

clear
clc
X1=imread('Pic1_3.bmp');
figure
subplot(131)
imshow(X1)
subplot(132)
imhist(X1)
XX1=im2bw(X1,254/255);
subplot(133)
for kk=1:2
m=30;
for i=m+1:size(XX1,1)-m
    for j=m+1:size(XX1,2)-m
        a=XX1(i-m:i+m,j-m:j+m);
        if length(find(a(1:m,m+1)==0))>0 & length(find(a(m+1:end,m+1)==0))>0 & length(find(a(m+1,1:m)==0))>0 & length(find(a(m+1,m+1:end)==0))>0
            XX1(i,j)=0;
        end
    end
end
end
imshow(XX1)
Ig=XX1;
%获取算子
s=GetStrelList();
%串联去噪
e=ErodeList(Ig,s);
%计算权重
f=GetRateList(Ig,e);
%并联
Igo=GetRemoveResult(f,e);
%计算PSNR值
psnr1=PSNR(XX1,e.eroded_co12);
psnr2=PSNR(XX1,e.eroded_co22);
psnr3=PSNR(XX1,e.eroded_co32);
psnr4=PSNR(XX1,e.eroded_co42);
psnr5=PSNR(XX1,Igo);
psnr_list=[psnr1 psnr2 psnr3 psnr4 psnr5];
M{1,1}=e.eroded_co12;
M{1,2}=e.eroded_co22;
M{1,3}=e.eroded_co32;
M{1,4}=e.eroded_co42;
M{1,5}=Igo;
figure
plot(1:5,psnr_list,'r+-');
set(gca,'XTick',0:6,'XTickLabel',{'','串联1','串联2','串联3','串联4','并联',''});
grid on;
title('PSNR曲线比较')
[~,b]=max(psnr_list);
result=M{1,b};
figure
imshow(result)
imhist(result)
result=im2bw(result,0.3);
Y1=bwperim(result);
imshow(Y1)
imwrite(Y1,'pic1.bmp')

函数代码:

function s=GetStrelList()
%获取算子
%输出参数
%s—算子结构体
%生成串联算子
s.co11=strel('line',3,-45);
s.co12=strel('line',5,-45);
%生成串联算子
s.co21=strel('line',3,45);
s.co22=strel('line',5,45);
%生成串联算子
s.co31=strel('line',3,90);
s.co32=strel('line',5,90);
%生成串联算子
s.co41=strel('line',3,0);
s.co42=strel('line',5,0);
function Igo=GetRemoveResult(f,e)
%并联去噪
%输入参数
% f—权值向量
% e—串联结果
%输出参数
% Igo—处理结果
Igo=...
    f.df1/f.df*double(e.eroded_co12)+f.df2/f.df*double(e.eroded_co22)+...
    f.df3/f.df*double(e.eroded_co32)+f.df4/f.df*double(e.eroded_co42);
Igo=mat2gray(Igo);
function f=GetRateList(Ig,e)
%计算权重
%输入参数
% Ig—图像矩阵
% e—串联结果
%输出参数
% f—处理结果
f.df1=sum(sum(abs(double(e.eroded_co12)-double(Ig))));
f.df2=sum(sum(abs(double(e.eroded_co22)-double(Ig))));
f.df3=sum(sum(abs(double(e.eroded_co32)-double(Ig))));
f.df4=sum(sum(abs(double(e.eroded_co42)-double(Ig))));
f.df=sum([f.df1 f.df2 f.df3 f.df4]);
function e=ErodeList(Ig,s)
%串联去噪
%输入参数
% Ig—图像矩阵
% s—算子
%输出参数
% e—处理结果
e.eroded_co11=imerode(Ig,s.co11);
e.eroded_co12=imerode(e.eroded_co11,s.co12);
e.eroded_co21=imerode(Ig,s.co21);
e.eroded_co22=imerode(e.eroded_co21,s.co22);
e.eroded_co31=imerode(Ig,s.co31);
e.eroded_co32=imerode(e.eroded_co21,s.co32);
e.eroded_co41=imerode(Ig,s.co41);
e.eroded_co42=imerode(e.eroded_co21,s.co42);
function S=PSNR(s,t)
%计算PSNR
%输入参数
% S—图像矩阵1
% t—图像矩阵2
%输出参数
% S—结果
%预处理
[m,n,~]=size(s);
s=im2uint8(mat2gray(s));
t=im2uint8(mat2gray(t));
s=double(s);
t=double(t);
%初值
sd=0;
mi=m*n*max(max(s.^2));
%计算
for u=1:m
    for v=1:n
        sd=sd+(s(u,v)-t(u,v))^2;
    end
end
if sd==0
    sd=1;
end
S=mi/sd;
S=10*log10(S);

运行:

image.png

image.png

image.png

相关文章
|
机器学习/深度学习 传感器 安全
基于matlab模拟给定参数下的平凸透镜的凸面轮廓曲线
基于matlab模拟给定参数下的平凸透镜的凸面轮廓曲线
|
机器学习/深度学习 传感器 运维
基于Matlab的故障检测的核PCA轮廓图
基于Matlab的故障检测的核PCA轮廓图
|
算法
基于基于全局差错能量函数的双目图像立体匹配算法matlab仿真,并提取图像的深度信息
基于基于全局差错能量函数的双目图像立体匹配算法matlab仿真,并提取图像的深度信息
169 0
基于基于全局差错能量函数的双目图像立体匹配算法matlab仿真,并提取图像的深度信息
|
机器学习/深度学习 传感器 算法
基于Matlab绘制带阴影区域的线附完整代码
基于Matlab绘制带阴影区域的线附完整代码
Matlab代码批处理中国地面气象日值数据集(2400站点数据集),提取所需省份全部站点数据
Matlab代码批处理中国地面气象日值数据集(2400站点数据集),提取所需省份全部站点数据
Matlab代码批处理中国地面气象日值数据集(2400站点数据集),提取所需省份全部站点数据
|
机器学习/深度学习 传感器 算法
【图像隐藏】基于小波变换DWT实现数字水印嵌入提取含各类攻击附matlab代码
【图像隐藏】基于小波变换DWT实现数字水印嵌入提取含各类攻击附matlab代码
|
机器学习/深度学习 传感器 算法
【图像处理】基于形状提取和模式匹配组合的面部特征点提取方法附Matlab代码
【图像处理】基于形状提取和模式匹配组合的面部特征点提取方法附Matlab代码
|
机器学习/深度学习 传感器 算法
【解包裹】基于GPSA和AIA实现相位提取附matlab代码
【解包裹】基于GPSA和AIA实现相位提取附matlab代码
|
机器学习/深度学习 传感器 算法
【图像特征提取】基于小波变换、gabor、双树复小波提取纹理图像特征附Matlab代码
【图像特征提取】基于小波变换、gabor、双树复小波提取纹理图像特征附Matlab代码
|
算法 异构计算
色彩空间的转换简单应用(理想情况车牌数字的提取)matlab仿真和FPGA实现
色彩空间的转换简单应用(理想情况车牌数字的提取)matlab仿真和FPGA实现
120 0
色彩空间的转换简单应用(理想情况车牌数字的提取)matlab仿真和FPGA实现
下一篇
无影云桌面