close all;
clear;
I = imread('fenge.jpg');
J = imread('laser.jpg');
K = imread('rice.bmp');
leve1=graythresh(I); %调用系统函数计算阈值
leve2=graythresh(J);
leve3=graythresh(K);
BW1=im2bw(I,leve1); %阈值分割
BW2=im2bw(J,leve2);
BW3=im2bw(K,leve3);
leve1=round(leve1*255); %四舍五入计算调用系统函数的阈值
leve2=round(leve2*255);
leve3=round(leve3*255);
figure
subplot(4,3,1),imshow(BW1),title('I调用库函数运行结果');
subplot(4,3,2),imshow(BW2),title('J调用库函数运行结果');
subplot(4,3,3),imshow(BW3),title('K调用库函数运行结果');
disp('I阈值:'),disp(leve1);
disp('J阈值:'),disp(leve2);
disp('K阈值:'),disp(leve3);
Ni1=imhist(I); %计算直方图数组
Ni2=imhist(J);
Ni3=imhist(K);
N1=sum(Ni1); %总像素点个数
N2=sum(Ni2);
N3=sum(Ni3);
delamax=0; %类间方差最大值
T=0; %阈值
for k=2:255
u=dot([0:255],Ni1/N1); %图像的总平均灰度级
w0=sum(Ni1(1:k)/N1); %C0类像素所占面积的比例
w1=1-w0; %C1类像素所占面积的比例
if w0==0|w0==1 %当w0为1或0时提前结束本次循环
continue
end
u0=dot([0:k-1],Ni1(1:k)/N1)/w0; %C0类像素的平均灰度
u1=dot([k:255],Ni1(k+1:256)/N1)/w1; %C1类像素的平均灰度
dela(k)=w0*(u-u0)^2+w1*(u-u1)^2; %类间方差公式
%求出类间方差的最大值,最大时的那个值对应的k值存入delamax
if dela(k)>delamax
delamax=dela(k);
T=k-1;
end
end
BW4=im2bw(I,T/255); %阈值分割
subplot(4,3,4),imshow(BW4),title('自编程序运行结果:I') %显示图片
disp('自编程序I阈值:') %显示提示信息
disp(T) %显示结果
delamax=0;
T2=0;
for k=2:255
u=dot([0:255],Ni2/N2); %图像的总平均灰度级
w0=sum(Ni2(1:k)/N2); %C0类像素所占面积的比例
w1=1-w0; %C1类像素所占面积的比例
if w0==0|w0==1 %当w0为1或0时提前结束本次循环
continue
end
u0=dot([0:k-1],Ni2(1:k)/N2)/w0; %C0类像素的平均灰度
u1=dot([k:255],Ni2(k+1:256)/N2)/w1; %C1类像素的平均灰度
dela(k)=w0*(u-u0)^2+w1*(u-u1)^2; %类间方差公式
%求出类间方差的最大值,最大时的那个值对应的k值存入delamax
if dela(k)>delamax
delamax=dela(k);
T2=k-1;
end
end
BW5=im2bw(J,T2/255); %阈值分割
subplot(4,3,5),imshow(BW5),title('自编程序运行结果:J') %显示图片
disp('自编程序J阈值:') %显示提示信息
disp(T2) %显示结果
delamax=0;
T3=0;
for k=2:255
u=dot([0:255],Ni3/N3); %图像的总平均灰度级
w0=sum(Ni3(1:k)/N3); %C0类像素所占面积的比例
w1=1-w0; %C1类像素所占面积的比例
if w0==0|w0==1 %当w0为1或0时提前结束本次循环
continue
end
u0=dot([0:k-1],Ni3(1:k)/N3)/w0; %C0类像素的平均灰度
u1=dot([k:255],Ni3(k+1:256)/N3)/w1; %C1类像素的平均灰度
dela(k)=w0*(u-u0)^2+w1*(u-u1)^2; %类间方差公式
%求出类间方差的最大值,最大时的那个值对应的k值存入delamax
if dela(k)>delamax
delamax=dela(k);
T3=k-1;
end
end
BW6=im2bw(K,T3/255); %阈值分割
subplot(4,3,6),imshow(BW6),title('自编程序运行结果:K') %显示图片
disp('自编程序K阈值:') %显示提示信息
disp(T3) %显示结果
%利用原图的灰度直方图人工定义阈值,实现全阈值分割,显示分割后的图像。
myF = I;
%卷积操作,先补零
myF(:, size(I, 2) + 1) = 0;
myF(size(I, 1) + 1, :) = 0;
%进行卷积检测边缘
P = ones(size(I, 1) + 1, size(I, 2) + 1);
for i = 1:size(I, 1)
for j = 1:size(I, 2)
P(i, j) = P(i, j) + abs(myF(i + 1, j + 1) -myF(i, j)) + abs(myF(i +1, j) - myF(i, j + 1));
end
end
P = P(1:size(I, 1), 1:size(I, 2));
%二值化操作
%先统计0到255灰度级对应的像素个数
L = zeros(1, 256);
for i = 1:size(P, 1)
for j = 1:size(P, 2)
for k = 0:255
if P(i, j) == k
L(k+1) = L(k+1) + 1;
end
end
end
end
subplot(4,3,10), bar(0:255, L),axis([0,255,0,1650]);%设置坐标轴x和y的范围——x从0到255,y从0到1650
%%取谷底的灰度级39为二值化阈值
for i = 1:size(P, 1)
for j = 1:size(P, 2)
if P(i, j) <= 39
P(i, j) = 0;
else
P(i, j) = 1;
end
end
end
subplot(4,3,7), imshow(P, []), title('二值化图像I');%输出二值化图像
my2 = J;
%卷积操作,先补零
my2(:, size(J, 2) + 1) = 0;
my2(size(J, 1) + 1, :) = 0;
%进行卷积检测边缘
Q = ones(size(J, 1) + 1, size(J, 2) + 1);
for i = 1:size(J, 1)
for j = 1:size(J, 2)
Q(i, j) = Q(i, j) + abs(my2(i + 1, j + 1) -my2(i, j)) + abs(my2(i +1, j) - my2(i, j + 1));
end
end
Q = Q(1:size(J, 1), 1:size(J, 2));
%二值化操作
%先统计0到255灰度级对应的像素个数
L = zeros(1, 256);
for i = 1:size(Q, 1)
for j = 1:size(Q, 2)
for k = 0:255
if Q(i, j) == k
L(k+1) = L(k+1) + 1;
end
end
end
end
subplot(4,3,11), bar(0:255, L),axis([0,255,0,1650]);%设置坐标轴x和y的范围——x从0到255,y从0到1650
%%取谷底的灰度级17为二值化阈值
for i = 1:size(Q, 1)
for j = 1:size(Q, 2)
if Q(i, j) <= 17
Q(i, j) = 0;
else
Q(i, j) = 1;
end
end
end
subplot(4,3,8), imshow(Q, []), title('二值化图像J');%输出二值化图像
my2 = K;
%卷积操作,先补零
my2(:, size(K, 2) + 1) = 0;
my2(size(K, 1) + 1, :) = 0;
%进行卷积检测边缘
Q = ones(size(K, 1) + 1, size(K, 2) + 1);
for i = 1:size(K, 1)
for j = 1:size(K, 2)
Q(i, j) = Q(i, j) + abs(my2(i + 1, j + 1) -my2(i, j)) + abs(my2(i +1, j) - my2(i, j + 1));
end
end
Q = Q(1:size(K, 1), 1:size(K, 2));
%二值化操作
%先统计0到255灰度级对应的像素个数
L = zeros(1, 256);
for i = 1:size(Q, 1)
for j = 1:size(Q, 2)
for k = 0:255
if Q(i, j) == k
L(k+1) = L(k+1) + 1;
end
end
end
end
subplot(4,3,12), bar(0:255, L),axis([0,255,0,1650]);%设置坐标轴x和y的范围——x从0到255,y从0到1650
%%取谷底的灰度级35为二值化阈值
for i = 1:size(Q, 1)
for j = 1:size(Q, 2)
if Q(i, j) <= 35
Q(i, j) = 0;
else
Q(i, j) = 1;
end
end
end
subplot(4,3,9), imshow(Q, []), title('二值化图像K');%输出二值化图像
y谁、傻
- 粉丝: 1
- 资源: 1
最新资源
- (苍穹外卖 DAY4)AOP!!!实现公共字段填充
- 二相混合式步进电机闭环矢量SVPWM控制simulink仿真模型 参考文献: 1 两相混合式步进电机高?性能闭环驱动?系统研
- calico111111
- 风光储、风光储并网直流微电网simulink仿真模型 系统由光伏发电系统、风力发电系统、混合储能系统(可单独储能
- comsol换流变压器电场计算模型,计算了换流变压器在直流和交流工况下的电势和电场分布
- 单相全桥逆变电路MATLAB仿真,原理图设计,单相全桥逆变器设计资料,ti的参考,可用做光伏并网逆变器,400V输入,220V输
- BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测(Matlab完整源码和数据)
- TMS系统产品需求文档(PRD).docx
- 基于小信号建模的下垂控制稳定分析,文章完全浮现 关键词:微电网,下垂控制,小信号模型,根轨迹,稳定性
- Java毕业设计-基于springboot开发的企业oa管理系统源代码+演示视频
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈