基于免疫算法的认知无线电资源分配优化算法的matlab仿真

news2024/11/18 9:50:07

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

       认知无线电(CR)的概念来自Joseph Mitolo博士1999年的开创性工作。它自适应地调整内部通信机制,通过学习,了解等实时变化特定的无线电操作参数(功率,载波调制和编码等),适应外部无线电环境,并独立空闲频谱它可以被搜索和使用。这有助于用户选择用于无线传输的最佳和最合适的服务,甚至允许基于现有或未来的无线电资源来延迟甚至主动地开始传输。

免疫算法基本步骤:

1、随机产生初始父代种群A1,根据先验知识抽取疫苗;

2、若当前群体中包含最佳个体,则算法停止运行并输出结果;否则,继续;

3、对当前第k代父本种群Ak进行交叉操作,得到种群Bk;

4、对Bk进行变异操作,得到种群Ck;

5、对Ck进行接种疫苗操作,得到种群Dk;

6、对Dk进行免疫选择操作,得到新一代父本Ak+1,转至第二步。

免疫算法进行子载波分配流程
免疫算法的主要操作如下:

抗体的编码和产生每个抗体由M位十进制整数组成,对应N个子载波,每个整数范围从1到M,表明子载体被分配给M个认知用户中的一个。抗体群是K,对应于K个解决方案。第一代抗体通常是随机产生的。
计算和排序亲和力 根据贪婪算法的基本思想,完成每种抗体的安全传输速率调整。安全传输速率调整完成后,获得每个抗体对应的加权安全吞吐量,然后排序
(3)存储单元的生成在(2)中排序后对应于较高加权吞吐量的抗体被保存为存储单元以避免后续操作中的丢失。

(4)蚂蚁的选择ibodies

浓度概率,亲和概率和选择概率有三个概率。

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

 

3.MATLAB核心程序

 
for m=1:M
    
    pl_cu_pu(1,m)=((loc_cu(m,1)-loc_pu(1,1))^2+(loc_cu(m,2)-loc_pu(1,2))^2)^0.5;
end
pl_cu_pu=10^(0.1*randn*Sigma)./((pl_cu_pu/3).^Eta);  %产生主用户和认知用户的路径损耗
pl_cu_cbs=10^(0.1*randn*Sigma)./((pl_cu_cbs/3).^Eta);  %产生用户和认知基站的路径损耗
for m=1:M
    for i=1:M
        pl_cu_cu(m,i)=((loc_cu(m,1)-loc_cu(i,1))^2+(loc_cu(m,2)-loc_cu(i,2))^2)^0.5;
    end
end
pl_cu_cu=10^(0.1*randn*Sigma)./((pl_cu_cu/3).^Eta);   %产生认知用户和认知用户之间的路径损耗
 
 
%对主用户干扰
to_pu_g=raylrnd(1,[M,N]);   %对主用户的信道干扰增益(第m行是第m个小f中各个子载波的增益)
lamda=zeros(1,N);  %对主用户距离干扰增益
Distance=zeros(1,N);   %第n个子载波和主用户的频带距离
for n=1:N
    Distance(1,n)=((N-(2*n-1)/2)*Delta_f+W/2);
end
F=@(f)((sin(pi*Ts*f)./(pi*Ts*f)).^2);      %积分函数
for n=1:N      %Lamda计算
    lamda(1,n)=Ts*quad(F,(Distance(1,n)-W/2),(Distance(1,n)+W/2));
end
 
for m=1:M
    for n=1:N
        to_pu_g(m,n)=to_pu_g(m,n)*lamda(1,n);   %对主用户的总的干扰增益
    end
end
 
for m=1:M
    to_pu_g(m,:)=to_pu_g(m,:)*pl_cu_pu(1,m);
end
 
 
%同频相互干扰
co_ch_g=zeros(M,M,N);  %同频干扰矩阵,第n页是第n个子载波的同频干扰
 
for n=1:N
    for i=1:M
        for j=i:M              %若要不同的同频干扰,则这里改为1:M
            co_ch_g(i,j,n)=raylrnd(1);
            co_ch_g(j,i,n)=co_ch_g(i,j,n);
        end
    end
end
for n=1:N
    for m=1:M
        co_ch_g(m,m,n)=0;
    end
end
for n=1:N
    co_ch_g(:,:,n)=(co_ch_g(:,:,n).^2).*pl_cu_cu;
end
for n=1:N
    for i=1:M
        co_ch_g(i,i,n)=0;
    end
end
 
%—有关各个子载波的信道增益——
ch_g=raylrnd(1,[M,N]);   %每个子载波的信道增益
for m=1:M
    ch_g(m,:)=(ch_g(m,:).^2)*pl_cu_cbs(1,m);
end
%===—有关运算结果显示=====二=
rate_gen1=zeros(1,genMax);   %每代的最优速率
rate_gen2=zeros(1,genMax);      %每代的最优速率
%rate_gen3=zeros(1,generaMax);   %每代的最优小速率
ratio_gen1=zeros(1,genMax);     %每代的最优速率功率比
ratio_gen2=zeros(1,genMax);     %每代的最优速率功率比
%ratio_gen3=zeros(1,genMax);     %每代的最优速率功率比
Pth=10;
for Ith=[0.001 0.005 0.01]
    for qq=1:10
        %=========程序初始化========
        temp_antibody(:)=Pth/N;       %初始抗体功率是平均分配
        temp_memorycell(:)=Pth/N;      %初始记忆细胞功率也是平均分配
        antibody(:)=temp_antibody(:);      %抗体变量装入初始抗体
        memorycell(:)=temp_memorycell(:);      %记忆细胞变量装入记忆细胞
        
        
        %=========主函数=========
        for gen=1:genMax
            gen
            
            %记忆细胞添加            
            antibody(:,:,(K-L+1):K)=memorycell;
            %antibody_falg((K-L+1):K)=1;                       %记录成型抗体
            
            
            
            %——抗体合格检测
            exceed_Ith=0;   %超过干扰门限的量
            exceed_Pth=0;      %超过功率门限的量
            decr_var_I=zeros(M,N);      %有关干扰的归一化的减少量
            decr_val_P=zeros(M,N);     %有关功率的归一化的减少量
            ratio_P=zeros(1,3);      %计算当前功率与公平性的比值
            standerd_site=0;      %作为基准的用户
            
            for k=1:K
                decr_val_P=antibody(:,:,k)/sum(sum(antibody(:,:,k)));   %根据现有功率计算归一化功率减少量
                if(sum(sum(antibody(:,:,k)))-Pth>eps)
                    exceed_Pth=sum(sum(antibody(:,:,k)))-Pth;   %计算超出多少
                    antibody(:,:,k)=antibody(:,:,k)-exceed_Pth*decr_val_P(:,:);
                end
                
                itfere_pu(:,:,k)=to_pu_g.*antibody(:,:,k);
                decr_val_I=itfere_pu(:,:,k)/sum(sum(itfere_pu(:,:,k)));      %根据现有干扰计算归一化功率减少量
                if(sum(sum(itfere_pu(:,:,k)))-Ith>eps)
                    exceed_Ith=sum(sum(itfere_pu(:,:,k)))-Ith;         %计算超出多少
                    
                    antibody(:,:,k)=antibody(:,:,k)-(exceed_Ith*decr_val_I)./(to_pu_g);
                end
                itfere_pu(:,:,k)=to_pu_g.*antibody(:,:,k);      %更新对主用户的干扰
            end
            
            
            
            
            
            
            %---速率计算
            h=zeros(M,N,K);   %各个子载波的信噪比
            i_ss=zeros(M,N,K);   %各个子载波受到的同频干扰
            for k=1:K
                for n=1:N
                    for m=1:M
                        for i=1:M
                            i_ss(m,n,k)=i_ss(m,n,k)+co_ch_g(i,m,n)*antibody(i,n,k);   %计算各个子载波所受到的同频干扰
                        end
                    end
                end
            end
            
            temp=sum(i_ss);
            
            for k=1:K
                for n=1:N
                    for m=1:M
                        i_ss(m,n,k)=temp(1,n,k)-i_ss(m,n,k);      %计算每个子载波所受到的同频干扰
                    end
                end
            end
            for k=1:K
                h(:,:,k)=ch_g./(N0*Delta_f+i_ss(:,:,k));           %计算信噪比
            end
            
            %rate=Delta_f*log2(1+antibody.*h/Tau);          %计算每个抗体每个小区的速率
            rate=log2(1+antibody.*h/Tau);         %计算每个抗体每个小区的速率
            
            
            %总的公平性调整
            for o=1:O
                %rate_m=zeros(1,3,K);      %各个小区的总速率
                %ratio_r=zeros(1,3);             %计算当前速率与公平性的比值
                standard_site=0;      %作为基准的用户
                decr_val_r=zeros(M,N);        %有关功率的归一化的减少量
                exceed_r=0;            %超过干扰门限的量
                rate_m=sum(rate,2);
                for k=1:K
                    ratio_r=rate_m(:,:,k)./Rate_m';
                    [~,standard_site]=min(ratio_r);     %选取基准功率
                    switch(standard_site)      %进行功率公平性调整
                        case 1   %第一个为基准
                            for m=[2 3]
                                exceed_r=rate_m(1,:,k)/2-rate_m(m,:,k);
                                decr_val_r(m,:)=(rate(m,:,k)/sum(rate(m,:,k)))*exceed_r;
                                if(exceed_r<0)
                                    for n=1:N
                                        antibody(m,n,k)=(2^decr_val_r(m,n)*(Tau+antibody(m,n,k)*h(m,n,k))-Tau)/h(m,n,k);
                                    end
                                end
                            end
                            
                        case 2            %第二个为基准
                            exceed_r=rate_m(2,:,k)*2-rate_m(1,:,k);
                            decr_val_r(1,:)=(rate(1,:,k)/sum(rate(1,:,k)))*exceed_r;
                            if(exceed_r<0)
                                for n=1:N
                                    antibody(1,n,k)=(2^decr_val_r(1,n)*(Tau+antibody(1,n,k)*h(1,n,k))-Tau)/h(1,n,k);
                                end
                            end
                            exceed_r=rate_m(2,:,k)-rate_m(3,:,k);
                            decr_cal_r(3,:)=(rate(3,:,k)/sum(rate(3,:,k)))*exceed_r;
                            if(exceed_r<0)
                                for n=1:N
                                    antibody(3,n,k)=(2^decr_cal_r(3,n)*(Tau+antibody(3,n,k)*h(3,n,k))-Tau)/h(3,n,k);
                                end
                            end
                            
                             
                        case 3              %第三个为基准
                            exceed_r=rate_m(3,:,k)*2-rate_m(1,:,k);
                            decr_val_r(1,:)=(rate(1,:,k)/sum(rate(1,:,k)))*exceed_r;
                            if(exceed_r<0)
                                for n=1:N
                                    antibody(1,n,k)=(2^decr_val_r(1,n)*(Tau+antibody(1,n,k)*h(1,n,k))-Tau)/h(1,n,k);
                                end
                            end
                            exceed_r=rate_m(3,:,k)-rate_m(2,:,k);
                            decr_val_r(2,:)=(rate(2,:,k)/sum(rate(2,:,k)))*exceed_r;
                            if(exceed_r<0)
                                for n=1:N
                                    antibody(2,n,k)=(2^decr_val_r(2,n)*(Tau+antibody(2,n,k)*h(2,n,k))-Tau)/h(2,n,k);
                                end
                            end
                    end
                end
                temp=antibody<=eps;
                antibody(temp)=eps;
                h=zeros(M,N,K);      %各个子载波的信噪比
                i_ss=zeros(M,N,K);          %各个子载波受到的同频干扰
                for k=1:K
                    for n=1:N
                        for m=1:M
                            for i=1:M
                                i_ss(m,n,k)=i_ss(m,n,k)+co_ch_g(i,m,n)*antibody(i,n,k);      %计算各个子载波所受到的同频干扰
                            end
                        end
                    end
                end
                temp=sum(i_ss);
               
                for k=1:K
                    for n=1:N
                        for m=1:M
                            i_ss(m,n,k)=temp(1,n,k)-i_ss(m,n,k);      %计算每个子载波所受到的同频干扰
                        end
                    end
                end
                
                for k=1:K
                    h(:,:,k)=ch_g./(N0*Delta_f+i_ss(:,:,k));             %计算信噪比
                end
                %rate=Delta_f*log2(1+antibody.*h/Tau);   %计算每个抗体每个小区的速率
                rate=log2(1+antibody.*h/Tau);   %计算每个抗体每个小区的速率
            end
            
            %速率功率比计算
            %if gen==genMax
            %rate=floor(rate);
            %end
            rate_antibody=sum(sum(rate));               %计算每个抗体速率
            ratio=rate_antibody./sum(sum(antibody));           %计算每个抗体的速率功率比
            Objective=ratio*Alpha+rate_antibody*(1-Alpha);               %计算优化目标的值
            
            
            
            %亲和力排序
            for i=1:K-1
                for j=i+1:K
                    if(Objective(i)<Objective(j))
                        temp=rate_antibody(i);         %每代速度交换
                        rate_antibody(i)=rate_antibody(j);
                        rate_antibody(j)=temp;
                        
                        temp=rate(:,:,i);               %速率交换
                        rate(:,:,i)=rate(:,:,j);
                        rate(:,:,j)=temp;
                        
                        
                        temp=antibody(:,:,i);            %功率交换
                        antibody(:,:,i)=antibody(:,:,j);
                        antibody(:,:,j)=temp;
                        
                        
                        temp=itfere_pu(:,:,i);            %对主用户干扰交换
                        itfere_pu(:,:,i)=itfere_pu(:,:,j);
                        itfere_pu(:,:,j)=temp;
                        
                        
                        temp=Objective(i);           %每代速度交换
                        Objective(i)=Objective(j);
                        Objective(j)=temp;
                        
                        
                        temp=ratio(i);                 %每代速度交换
                        ratio(i)=ratio(j);
                        ratio(j)=temp;
                        
%                         temp=antibody_flag(i);
%                         antibody_flag(i)=antibody_flag(j);
%                         antibody_flag(j)=temp;
                        
                    end
                end
            end
            
            
            
            %提取记忆细胞
            memorycell=antibody(:,:,1:L);                %前L个个体作为记忆细胞提取
            
            
            %算法结果等待
            rate_gen1(gen)=rate_antibody(1);   %记录每代最优的最小速度
            ratio_gen1(gen)=Objective(1);      %每代最优速率功率比
            
            %抗体选择
            %pd=zeros(1,K);             %浓度概率
            pf=zeros(1,K);                 %适应度概率
            %p=zeros(1,K);                %选择概率
            resemble=zeros(1,K);         %抗体的相似度
            res=zeros(M,N,K);              %各个子载波的距离
            index=zeros(1,K);               %轮盘赌抗体索引
            
            for k=1:K
                for i=1:K
                    res(:,:,i)=abs(antibody(:,:,k)-antibody(:,:,i));               %计算各个子载波的距离
                end
                temp=(res<=Gama*Pth);             %距离过近的子载波个数
                temp=sum(sum(temp));                %计算与每个抗体的距离
                for i=1:K
                    resemble(k)=resemble(k)+temp(i);
                end
            end
            pd=1-resemble/(M*N*K);
            
            for k=1:K
                pf(k)=(Objective(k)-Objective(K)+eps)/(Objective(1)-Objective(K)+eps);
            end
            p=Rho*pf+(1-Rho)*pd;
            
            for i=1:K-1                   %抗体按照选择概率排序
                for j=i+1:K
                    if(p(i)<p(j))
                        temp=p(i);
                        p(i)=p(j);
                        p(j)=temp;
                        temp=antibody(i);
                        antibody(i)=antibody(j);
                        antibody(j)=temp;
                    end
                end
            end
            
            
            for k=1:K                        %选出K个抗体
                temp=rand*sum(p);
                for i=1:K
                    temp=temp-p(i);
                    if(temp<=0)
                        index(k)=i;             %赌出第k个索引值
                        break;
                    end
                end
            end
            temp=antibody;
            antibody=temp(:,:,index);
            
            
            %两种交叉
            [antibody]=dou_atb_excha(N,K,Pc,antibody);               %调用交叉互换函数i现i叉互换
            %两种突变
            [antibody]=dou_atb_mutat(K,N,M,Pm,antibody);            %调用突变函数实现抗体突变
            
        end
        obj(qq,:)=ratio_gen1;
        obj11(qq,:)=2*rate_gen1;
    end
    hold on;
    oobj=mean(obj);
    oobj11=mean(obj11);
    plot(oobj11);
    xlabel('代数');ylabel('亲和力');title('收敛性能');
    legend('Ith=0.001','Ith=0.005','Ith=0.01','Location','NorthEast');
    
 
end
 
A108

4.完整MATLAB

V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库实验四:触发器实验

实验四 触发器实验 1.实验目的 ​ 掌握数据库触发器的设计和使用方法。 2.实验内容和要求 ​ 定义BEFORE触发器和AFTER触发器&#xff0c;能够理解不同类型触发器的作用和执行原理&#xff0c;验证触发器的有效性。 3.实验重点和难点 ​ 实验重点&#xff1a;触发器的定义…

大二Web课程设计——张家界旅游网站设计与实现(HTML+CSS+JavaScript)

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

【应用】Modbus 通讯协议

Modbus 通讯协议Modbus 协议基础Modbus 存储区Modbus-RTU 协议Modbus-TCP 协议Java 实现 Modbus 通讯Modbus ReadModbus Write模拟数据进行代码测试Modbus-RTU 代码验证Modbus-TCP 代码验证SerialPortWrapper 实现类代码Modbus 协议基础 Modbus 是一种总线通讯协议&#xff0c;…

[附源码]计算机毕业设计贵港高铁站志愿者服务平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

Spring Bean的生命周期

一、首先我们要知道什么是Spring Bean&#xff1a;Spring Bean是Spring框架在运行管理时的对象。 二、Spring Bean的生命周期&#xff1a; 简单来说bean会经历四个阶段&#xff1a; 实例化 -》 属性赋值 -》初始化 -》销毁 下面我们来具体看一下&#xff1a; 1.实例化 Bea…

软件质量评估模型

软件质量是指软件产品满足用户要求的程度。可以从多个方面来理解此处所指的用户要求,包括用户期望的软件系统的功能、性能、可维护性、可操作性、可重用性等等。在软件项目实施过程中,经常会听到用户关于软件系统的以下一组质量评价。 软件系统没有某些方面的功能软件系统运行…

【5G MAC】NR Timing Advance(RAR TA 和 MAC-CE TA)

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

[Linux]基础命令(1)

Linux基本命令&#xff08;1&#xff09; 文章目录Linux基本命令&#xff08;1&#xff09;1.操作系统&#xff1a;&#xff08;1&#xff09;什么是操作系统&#xff1a;&#xff08;2&#xff09;为什么要有操作系统&#xff1a;2. ls命令:3. pwd指令&#xff1a;4. cd命令:5…

2022-12-11

文章目录前言PWMPwmChannelPwmAssignedHwUnitPwmChannelIdPwmCoherentUpdatePwmDutycycleDefaultPwmIdleStatePwmNotificationPwmChannelClassPwmPeriodDefaultPwmPolarityPwmReferenceChannelPwmSafetySignalPwmShiftValuePWM输出偏移的使用PwmConfigurationOfOptApiServicesP…

windows 基于 MediaPipe 实现 Holistic

主页: https://google.github.io/mediapipe/solutions/holistic.html MediaPipe Holistic pipelines 集成了姿势、面部和手部组件的独立模型&#xff0c;每个组件都针对其特定领域进行了优化&#xff0c;每个组件的推断输入图不同。 MediaPipe Holistic 首先通过 BlazePose 的姿…

基于极限学习机进行股市预测(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

MySQL-InnoDB的事务隔离级别

MySQL 是一个服务器&#xff0f;客户端架构的软件&#xff0c;对于同一个服务器来说&#xff0c;可以有若干个客户端与之连接&#xff0c;每个客户端与服务器连接上之后&#xff0c;就可以称之为一个会话&#xff08; Session &#xff09;。我们可以同时在不同的会话里输入各种…

【图像处理】opencv | 图像的载入,显示,保存 | 视频流的载入,显示,保存

文章目录前言一、cv2读取图片并展示1.1、cv2.imread读取图片1.2、cv2.imshow展示图片1.3、完整代码1.4、封装函数调用1.5、cv2读取为灰度图像1.6、cv2.imwrite保存图像二、cv2读取视频并且展示2.1 展示彩色视频2.2 展示灰度视频2.3 保存视频前言 本文参考视频&#xff1a;唐宇…

二进制搭建k8s——部署etcd集群和单master

二进制搭建k8s——部署etcd集群和单master二进制搭建k8s——部署etcd集群和单master环境1、操作系统初始化配置&#xff08;全部节点&#xff09;2、部署 docker 引擎&#xff08;所有节点&#xff09;3、部署 etcd 集群准备签发证书环境在 master01 节点上操作在 node01 和 no…

端口隔离实现同一vlan下,二层和三层的互不通

如图&#xff1a;我们要实现下图中&#xff0c;PC1和PC2不通&#xff0c;但都和PC3互通&#xff1a; 配置如下&#xff1a; vlan batch 10 port-isolate mode all # interface GigabitEthernet0/0/1 port link-type access port default vlan 10 port-isolate enable grou…

【golang】 demo 之王realworld,使用golang+gin做后端技术,使用vue做前端项目的开源博客项目

目录前言1&#xff0c;关于realworld项目2&#xff0c;前端项目使用vue3开发的3&#xff0c;后端使用golanggin进行接口开发4&#xff0c;总结前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/108971807 未经博主允许不得转载。 博主CSDN地址是&…

idea中打包docker镜像

idea中打包docker镜像 说明 ​ 构建和推送镜像都是需要docker环境的&#xff0c;这个大家可以使用同一个远程的环境&#xff0c;这里说的就是idea使用服务器上的docker进行镜像的构建和发布&#xff0c; ​ 默认高版本的idea中默认集成了docker插件&#xff0c;这个插件的官…

高并发高可用

一、高并发 1、异步并发 同步阻塞 异步Future 异步CallBack 异步编排CompletableFuture 请求缓存 请求合并 2、扩容 单体应用垂直扩容 单体应用水平扩容 应用拆分 数据库拆分水平/垂直拆分 使用Sharding-jdbc分库分表/读写分离 数据异构 任务系统扩容 3、队列 …

[LeetCode周赛复盘] 第 93 场双周赛20221015-补

[LeetCode周赛复盘] 第 93 场双周赛20221015-补 一、本周周赛总结二、 [Easy] 6261. 数组中字符串的最大值1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6262. 图中最大星和1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6263. 青蛙过河 II1. 题目描述2. 思路分析3. 代码实…

【OpenCV学习】第13课:基本阈值操作

仅自学做笔记用,后续有错误会更改 参考文章:https://blog.csdn.net/qq_37835727/article/details/123373339 理论 图像阈值&#xff1a;什么是图像阈值&#xff1f;简单点来说就是把图像分割的标尺&#xff0c; 举个栗子&#xff0c; 现在想象一个场景&#xff0c; 一个桌子上…