基于MATLAB的图像融合设计

news2024/11/24 13:20:36

 

图像融合能够将不同类型传感器获取的同一对象的图像数据进行空间配准。并且采用一定的算法将不同类型的传感器获取的同一对象的图像数据所含用的信息优势或互补性有机地结合起来产生的新的图像数据。这种新数据含有所研究对象的更多信息表征,与单一图像相对比,能够减少或抑制所研究对象可能存在的多义性、不确定性和误差,最大限度地利用同一对象的多种图像数据的信息。

论文中主要内容是;首先介绍了图像信息融合的概念、接着论述了像素级、特征级、决策级三个图像融合的层次及MATLAB介绍,在最后论述了图像融合的在生活中的应用。

关键词:图像融合; 图像层次; 应用;

  录

基于MATLAB的图像融合设计

摘  要

第一章 绪论

1.1图像融合的概念

1.2图像融合的主要研究内容

第二章 图像融合的常用方法

2.1 图像融合的常用算法

2.1.1 基于图像灰度的融合算法

2.1.2基于变换域的融合算法

2.2图像融合规则

第三章 MATLAB 程序设计

3.1 MATLAB 软件简介

3.2 MATLAB 软件窗口环境

第四章 图像融合实例-小波变换( DWT )

第五章 应用与总结

参考文献

附录

第一章 绪论 

图像融合技术作为多类型传感器信息融合的一个非常重要的分支-可视信息的融合,近20年来,引起了世界范围为内的广泛关注和研究热潮。图像融合就是通过多幅图像数据互补得到一幅新的图像,在这幅图像中能够反映多重原始图像中的信息。图像融合的目的是充分利用多个待融合源图像中包含的互补信息,融合后的图像应该更适合于人类视觉感知或计算机后续处理,减少不确定性。图像融合技术在遥感、医学、自然资源勘测、生物学等领域占有极其重要的地位。

论文中介绍了像素级图像融合常用方法及图像融合实例。

1.1图像融合的概念

图像融合是二十世纪70年代后期提出的新的概念,是多传感器信息中可视信息部分的融合,是将多源信道所采集的关于统一目标图像经过一定的图像处理,提取各自信道的信息,最后合成统一的图像以供观察和处理。鉴于图像融合具有突出的探测优越性,在技术先进国家受到高度重视并取得相当的进展。

图像融合的形式大致可分为多传感器不同时获取的图像的融合、多传感器同时获取的融合、单一传感器不同时间,不同条件获取的图像融合三种。图像融合能够充分利用这些时间或空间上冗余或互补的图像信息,依据一定的融合算法合成一幅满足某种需要的新图像,从而获得对场景的进一步分析、理解以及目标的检测、识别或跟踪。

1.2图像融合的主要研究内容

图像融合的层次可分为 : 像素级、特征级和决策级。

像素级图像融合是在基础层面上进行的信息融合,其主要完成的任务是对多传感器目标和背景要素的测量结果进行融合处理。像素级图像融合是直接在原始数据层上进行的融合,该层次的融合准确性最高,能够提供其它层次上的融合处理所不具有的更丰富、更精确、更可靠的细节信息,有利于图像的进一步分析、处理与理解。像素级融合是图像融合中最为复杂且实施难度最大的融合。

特征级图像融合是对源图像进行预处理和特征提取后获得的特征信息 ( 如边缘、形状、轮廓、区域等 ) 进行综合。特征级融合属于中间层次的信息融合,它既保留了足够数量的重要信息,又可对信息进行压缩,有利于实时处理。它使用参数模板、统计分析、模式相关等方法完成几何关联、特征提取和目标识别等功能,以利于系统判决。一般从源图像中提取的典型特征信息有 : 线型、边缘、纹理、光谱、相似亮度区域、相思景深区域等。

决策级图像融合是一种更高层次的信息融合,其结果将为各种控制或决策提供依据。这种方法是首先对各个源数据进行处理,分别得出判断和识别的结果,融合中心将这些结果按照一定的准则和每个数据源决策的可信度进行协调,以取得最优的决策结果。

第二章 图像融合的常用方法

2.1 图像融合的常用算法

2.1.1 基于图像灰度的融合算法

基于图像灰度值的融合方法比较简单,此类方法有选择法,加权平均法,优化法等。

选择法:将采集到的图像转换为灰度图像,用矩阵记录各点像素值。对于重叠区域的各点像素值,设定一个阈值,当对应两点的像素值差值在阈值判定范围内时只选择一幅图像中改点的像素值作为拼接后该点的像素值。此融合方法操作简单,但拼接区域过渡不平滑,极易出现拼接缝隙。

加权平均法:对两幅图像重叠区域的每个像素值按距离重叠区域边缘的远近进行加权,离边缘越近加权系数越小。在加权系数的基础上计算加权像素值,并在拼接图像的该像素位置賦予加权平均后的像素值。加权平均可以是线性加权,也可以三角函数的形式定义加权系数,使加权计算结果更加真实有效。

优化法:优化法就是根据不同类型图像拼接融合的需求,混合使用灰度融合算法,或在统计重叠区域像素特征的基础上分别采用多种方案的融合方法,以此来提高图像的融合效果。

基于图像灰度的融合算法简单、直观、灵活、易操作,本文提出的方法在融合方面选择基于图像灰度的加权平均法。

2.1.2基于变换域的融合算法

传统的信号理论是建立在Fourier分析基础上的,而Fourier变换作为一种全局性的变换,存在一定的局限性。在实际应用中,人们对Fourier变换进行了各种改进,从而产生了小波分析。在信号处理、图像处理、语音处理以及众多非线性科学领域,它被认为是继Fourier分析之后的又一个有效的时频分析方法。与Fourier变换相比,小波变换是一个在时间域和频域的局部变换,能够快速的从数据中获得有效信息,在进行伸缩和平移等运算后,对函数或信号进行多尺度的细致分析(Multiscale Analysis),从而解决了从而解决了Fourier变换无法处理的难题。

在图像处理领域,小波变换有以下几个优点;

(1)它能够对信号提供一个相对完善的描述,并且覆盖整个频域空间:

(2)借助于选择合适的滤波器,小波变换能够很好的降低获取到的不同特征之间的关联度:

(3)小波变换具有较好的“变焦"特性,在低频段,可以采用高频率分辨率和低时间分辨率的宽分析窗口:在高段,可以采用低频率分辨率和高时间分辨率的窄分析窗口:

(4)小波变换在实现上有快速的算法,比如Mallat小波分解算法。

鉴于小波变换的以上几个优点,在图像融合时也常选择对图像进行小波变换,在变换后的不同频域空间上分别采用融合策略,在频域空间融合之后再进行一次逆变换,从而得到融合后的图像。本文也将采用小波变换的方法,在下文中为大家举例。

2.2图像融合规则

图像的融合规则(Fusion rule)是图像融合的核心,融合规则的好坏直接影响融合图像的速度和质量。

Burt提出了基于像素选取的融合规则,在将原图像分解成不同分辨率图像的基础上,选取绝对值最大的像素值(或系数)作为融合后的像素值(或系数)。这是基于在不同分辨率图像中,具有较大值的像素(或系数)包含更多的图像信息。

Petrovic和Xydeas提出了考虑分解层内各图像(若存在多个图像)及分解层间的相关性的像素选取融合规则。蒲恬在应用小波变换进行图像融合时,根据人类视觉系统对局部对比度敏感的特性,采用了基于对比度的像素选取融合规则。

基于像素的融合选取仅是以单个像素作为融合对象,它并未考虑图像相邻像素间的相关性,因此融合结果不是很理想。考虑图像相邻像素间的相关性,Burt和Kolczynski 提出了基于区域特性选择的加权平均融合规则,将像素值(或系数)的融合选取与其所在的局部区域联系起来。

在Lietal提出的融合规则中,其在选取窗口区域中较大的像素值(或系数)作为融合后像素值(或系数)的同时,还考虑了窗口区域像素(或系数)的相关性。Chibani和 Houacine在其融合规则中,通过计算输入原图像相应窗口区域中像素绝对值相比较大的个数,决定融合像素的选取。基于窗口区域的融合规则由于考虑相邻像素的相关性,因此减少了融合像素的错误选取,融合效果得到提高。

ZZhang和Blum提出了基于区域的融合规则。将图像中每个像素均看作区域或边缘的一部分,并用区域和边界等图像信息来指导融合选取。采用这种融合规则所得到的融合效果较好,但此规则相对其他融合规则要复杂。对于复杂的图像,此规则不易于实现。

第三章 MATLAB 程序设计

3.1 MATLAB 软件简介

MATLAB的名称源自Matrix Laboratory,它是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作,而且利用MATLAB产品的开放式结构,可以非常容易地对MATLAB的功能进行扩充,从而在不断深化对问题认识的同时,不断完善MATLAB产品以提高产品自身的竞争能力。 

目前MATLAB  产品族可以用来进行  :  

数值分析  

   

数值和符号计算

   

工程与科学绘图

   

控制系统的设计与方针

   

数字图像处理

   

数字信号处理

   

通讯系统设计与仿真

   

财务与金融工程

MATLAB是MATLAB产品家族的基础,它提供了基本的数学算法,例如矩阵运算、数值分析算法,MATLAB集成了2D和3D图形功能,以完成相应数值可视化的工作,并且提供了一种交互式的高级编程语言 —— M语言,利用M 语言可以通过编写脚本或者函数文件实现用户自己的算法。  

MATLAB Compiler是一种编译工具,它能够将那些利用MATLAB提供的编程语言编写的函数文件编译生成为函数库、可执行文件COM组件等等。这样就可以扩展MATLAB功能,使MATLAB能够同其他高级编程语言例如C/C++语言进行混合应用,取长补短,以提高程序的运行效率,丰富程序开发的手段。  

利用M语言还开发了相应的MATLAB专业工具箱函数供用户直接使用。这些工具箱应用的算法是开放的可扩展的,用户不仅可以查看其中的算法, 还可以针对一些算法进行修改,甚至允许开发自己的算法扩充工具箱的功能。目前  MATLAB  产品的工具箱有四十多个,分别涵盖了数据获取、科学计算、控制系统设计与分析、数字信号处理、数字图像处理、金融财务分析以及生物遗传工程等专业领域。

Stateflow是一个交互式的设计工具,它基于有限状态机的理论,可以用来对复杂的事件驱动系统进行建模和仿真。Stateflow与Simulink和MATLAB紧密集成,Stateflow  创建的复杂控制逻辑有效地结合到Simulink的模型中。  

在MATLAB产品族中,自动化的代码生成工具主要有Real-Time Workshop(RTW )和  Stateflow Coder,这两种代码生成工具可以直接将Simulink的模型框图和Stateflow的状态图转换成高效优化的程序代码。利用RTW 生成的代码简洁、可靠、易读。目前RTW支持生成标准的C语言代码,并且具备了生成其他语言代码的能力。整个代码的生成、编译以及相应的目标下载过程都是自动完成的,用户需要做得仅仅使用鼠标点击几个按钮即可。MathWorks公司针对不同的实时或非实时操作系统平台,开发了相应的目标选项,配合不同的软硬件系统,可以完成快速控制原型(Rapid Control Prototype  )开发、硬件在回路的实时仿真(Hardware-in-Loop)、产品代码生成等工作。  

另外,MATLAB开放性的可扩充体系允许用户开发自定义的系统目标,利用Real-Time Workshop Embedded Coder能够直接将Simulink的模型转变成效率优化的产品级代码。代码不仅可以是浮点的,还可以是定点的。MATLAB开放的产品体系使MATLAB成为了诸多领域的开发首选软件,并且,MATLAB还具有300余家第三方合作伙伴,分布在科学计算、机械动力、化工、计算机通讯、汽车、金融等领域。接口方式包括了联合建模、数据共享、开发流程衔接等等。

3.2 MATLAB 软件窗口环境

计算机安装好 MATLAB 之后,双击 MATLAB 图标,就可以进入命令窗口,此时意味着系统处于准备接受命令的状态,可以在命令窗口中直接输入命令语句。

MATLAB 语句形式

》变量=表达式;

通过等于符号将表达式的值赋予变量。当键入回车键时,该语句被执行。语句执行之后,窗口自动显示出语句执行的结果。如果希望结果不被显示,则只要在语句之后加上一个分号(;)即可。此时尽管结果没有显示,但它依然被赋值并在MATLAB工作空间中分配了内存。

变量和数值显示格式   :

( 1 )变量

变量的命名:变量的名字必须以字母开头(不能超过 19 个字符),之后可以是任意字母、数字或下划线;变量名称区分字母的大小写;变量中不能包含有标点符号。

一些特殊的变量

ans:用于结果的缺省变量名i j:虚数单位

pi圆周率nargin:函数的输入变量个数

eps:计算机的最小数nargout:函数的输出变量个数

inf:无穷大realmin:最小;正实数

realmax:最大正实数nan:不定量

flops:浮点运算数

变量操作

在命令窗口中,同时存储着输入的命令和创建的所有变量值,它们可以在任何需要的时候被调用。如要察看变量a的值,只需要在命令窗口中输入变量的名称即可:》a

( 2 )数值显示格式

任何 MATLAB 的语句的执行结果都可以在屏幕上显示,同时赋值给指定的变量,没有指定变量时,赋值给一个特殊的变量ans,数据的显示格式由format命令控制。

forma只是影响结果的显示,不影响其计算与存储:MATLAB总是以双字长浮点数(双精度)来执行所有的运算。

2.3 M语言编程

MATLAB是美国MathWorks公司开发的用于教育、工程与科学计算的软件产品,它向用户提供从概念设计、算法开发、建模仿真到实时实现的理想集成环境。无论是进行科学研究、产品开发,还是从事教育事业,MATLAB产品都是非常有效的工具。相对于其他类似于 MATLAB 的仿真软件,MATLAB的一个显著特点就是它提供了一种用于编程的高级语言-M语言。通过这种语言,用户可以用类似于数学公式的方式来编写算法,大大降低了编程所需的难度并节省了时间,从而让用户把主要的精力集中在算法的构思而不是编程上。

在MATLAB中,在给变量赋值之前,不需要定义它的类型。例如对变量var1赋值1000,并没有事先定义var1的数据类型。MATLAB会自动决定变量的类型,并为它分配内存空间。对上述变量var1,MATLAB将它默认定义为双精度浮点型,分配8个字节的存储空间。语言中的变量名(包括函数名)是以英文字母开头的英文字母、下划线和阿拉伯数字的组合,有效长度不超过 31 。

M 语言支持类似于数学公式的编程。例如,C=A+B 就可完成矩阵A和矩阵B的相加运算,并把结果存储在C中。MATLAB中所有的变量都没有维数的限制(维数自动扩展),并且是以数组(array)的方式存储。但在数学意义上,基本上可以把所有的变量都当作矩阵来理解,尤其是对数值变量(对于结构数组,元胞数组最好不要当作矩阵来理解)。例如在 C=A+B中,变量A和B都是以2×2维数组的方式存储的(存储方式为按列存储,而 C/C++ 中的数组变量是按行存储的,这个区别需要注意),在数学意义上可将A和B当作两个2×2 维的矩阵,C=A+B完成的便是两个矩阵的相加运算。同样的,[U,S,V]=svd(A)实现对矩阵 A 的奇异值分解。在MATLAB中所有变量的维数都可自动扩展,但始终保持它的矩形结构。

第四章 图像融合实例-小波变换( DWT

在众多的图像融合技术中,基于小波变换的图像融合方法已成为现今研究的一个热点。这类算法主要是利用人眼对局部对比度的变化比较敏感这一事实,根据一定的融合规则,在多幅原图像中选择出最显著的特征,例如边缘、线段等,并将这些特征保留在最终的合成图像中。在一幅图像的小波变换中,绝对值较大的小波系数对应于边缘这些较为显著的特征,所以大部分基于小波变换的图像融合算法主要研究如何选择合成图像中的小波系数,也就是三个方向上的高频系数,从而达到保留图像边缘的目的。虽然小波系数(高频系数)的选择对于保留图像的边缘等特征具有非常主要的作用,但尺度系数(低频系数)决定了图像的轮廓,正确地选择尺度系数对提高合成图像的视觉效果具有举足轻重的作用。

基于 SIDWT(Shift Invariance Discrete Wavelet Transform)小波变换的算法程序:

filename1='C:\文档数据\作业\图像融合\1.jpg';

info=imfinfo(filename1);

width1=info.Width;

height1=info.Height;

if strcmp(info.ColorType,'grayscale')==1

[A,MAP]=gray2ind(imread(filename1));

RGB1=ind2rgb(A,MAP);

end

if strcmp(info.ColorType,'indexed')==1

[A,MAP]=imread(filename1);

RGB1=ind2rgb(A,MAP);

end

if strcmp(info.ColorType,'truecolor')==1

RGB1=imread(filename1);

end

figure,imshow(RGB1);

filename2='C:\文档数据\作业\图像融合\2.jpg';

info=imfinfo(filename2);

width2=info.Width;

height2=info.Height;

if strcmp(info.ColorType,'grayscale')==1

[A,MAP]=gray2ind(imread(filename2));

RGB2=ind2rgb(A,MAP);

end

if strcmp(info.ColorType,'indexed')==1

[A,MAP]=gray2ind(imread(filename2));

RGB2=ind2rgb(A,MAP);

end

if strcmp(info.ColorType,'truecolor')==1

[A,MAP]=gray2ind(imread(filename2));

RGB2=ind2rgb(A,MAP);

end

figure,imshow(RGB2);

BW=~im2bw(RGB1);

figure;imshow(BW);

B=imfill(imfill(BW,[1,1],4),[1,width1],4);

B=~xor(BW,B);

A=im2double(RGB1);

D=zeros(height1,width1);

K=3;

for i=1:1:height1

    for j=1:1:width1

        if B(i,j)==0

            A(i,j,1)=0;

            A(i,j,2)=0;

            A(i,j,3)=1.0;

        else

            for K=1:1:K

                N(k)=B(i,j+k-round(K/2));

            end

            if ~all(N)

                if~isempty(find(N==1, 1))

                    k1=1;k2=-1;

                    while 1

                        r=A(i,j+k1,1);

                        g=A(i,j+k1,2);

                        b=A(i,j+k1,3);

                        if B(i,j+k1)==1

                            break;

                        end

                        r=A(i,j+k2,1);

                        g=A(i,j+k2,2);

                        b=A(i,j+k2,3);

                        if B(i,j+k2)==1

                            break;

                        end

                        k1=k1+1;k2=k2-1;

                    end

                    A(i,j,1)=r;

                    A(i,j,2)=g;

                    A(i,j,3)=b;

                end

            end

        end

    end

end

x=280;y=100;

RGB=im2double(RGB2);

for i=1:1:height1

    for j=1:1:width1

        if B(i,j)==1

            if D(i,j)==1

                RGB(y+i,x+j,1)=0.5*A(i,j,1)+0.5*RGB(y+i,x+j,1);

                RGB(y+i,x+j,2)=0.5*A(i,j,2)+0.5*RGB(y+i,x+j,2);

                RGB(y+i,x+j,3)=0.5*A(i,j,3)+0.5*RGB(y+i,x+j,3);

            else

                RGB(y+i,x+j,1)=A(i,j,1);

                RGB(y+i,x+j,2)=A(i,j,2);

                RGB(y+i,x+j,3)=A(i,j,3);

            end

        end

    end

end

figure;imshow(RGB);

小波变换技术从时间频率采用局部化作用分析,同时小波变换可以有效的对信号数据进行具体分解,从中获得更为具体的信息,具备了短时傅立叶变换局部处理化的基本原理,基于伸缩平移处理运算对信号数据完成多尺度细化处理,并达到高频段时域和低频段频率细分的目的。

为了加深印象用上述的基于小波变换的程序在MATLAB上进行用做图像融合的验证实验,我在网上找了两张分辨率相同图作为图像融合的原始材料,原图如下:

由上述的程序运行得到下图:

仿真结果分析:从仿真结果可以看出,文章中给出的方法能够很好地保留原来图片中的有用信息,得到目标聚焦很清晰的融合图片。参加融合的图片都需要经过配准,图片是否配准,直接影响到融合的结果。而本实验中的图片都进行了配准。1中用小波函数sym4对X1进行2层小波分解对分解系数进行处理以突出轮廓部分,弱化细节部分,从实验的结果中,我们可以明确的看到,融合后的图象具有了两幅图象的特征;2中将两幅描述同一对象的模糊图象,可见到它们分别在不同的地方有些模糊,然后通过小波变换对其进行图像融合,可以从结果中看到融合后的图象清楚的表现了对象特征。

第五章 应用与总结

图像融合技术在军事、遥感和医学成像等领域有着广泛的应用,和人工智能等的新兴技术。近年来,图像融合已成为一种十分重要的图像分析与计算机视觉技术。它在自动目标识别计算机视觉遥感、机器人、医学图像处理以及军事应用等领域有着广泛的应用前景。

智能机器人领域:动作控制“对环境的视觉触觉力矩反馈”立体摄像融合“智能注视控制”自动目标识别和跟踪。信息融合技术对机器人领域起到了一定的推动作用。作为信息融合的重要分支-图像融合技术可用于自动目标识别等。

医学影像领域:计算机辅助手术、 3-D 表面空间校准。医学图像融合是医学图像后处理的研究热点主要包括转换、配准和信息提取三个步骤。它充分利用多模式图像获得互补信息,使临床的诊断和治疗更加准确完善。

数字图像融合是图像分析的一项重要技术,该技术在数字地图拼接、全景图、虚拟现实等领域有着重要应用。虽然Photoshop等图像处现软件提供了图像处理功能,可以通过拖放的方式进行图像拼接,但由于完全是手工操作,单调乏味,且精度不高,因此,有必要寻找一种方便可行的图像融合方法。Mattab具有强大的计算功能和丰富的工具箱函数,例如图像处理和小波工具箱包含了大多数经典算法,并且它提供了一个非常方便快捷的算法研究平台,可让用户把精力集中在算法上而不是编程上,从而能大大提高研究效率。

图像融合利用小波变换算法对原图像进行融合处理,边缘的点加以保留,得到的合成图像十分清晰,细节很丰富。

参考文献

[1]  敬忠良,肖刚,李振华. 图像融合--理论与应用[M]. 北京:高等教育出版社,  2007:3-9.

[2]  王文武.像素级图像融合技术研究[D]. 华中科技大学, 2005:9-10.

[3]  张晓东,罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015

[4]  赵晓雷. 像素级图像融合技术研究[D]. 西安科技大学, 2010:1-5, 38-42.

附录

程序:filename1='C:\文档数据\作业\图像融合\1.jpg';

info=imfinfo(filename1);

width1=info.Width;

height1=info.Height;

if strcmp(info.ColorType,'grayscale')==1

[A,MAP]=gray2ind(imread(filename1));

RGB1=ind2rgb(A,MAP);

end

if strcmp(info.ColorType,'indexed')==1

[A,MAP]=imread(filename1);

RGB1=ind2rgb(A,MAP);

end

if strcmp(info.ColorType,'truecolor')==1

RGB1=imread(filename1);

end

figure,imshow(RGB1);

filename2='C:\文档数据\作业\图像融合\2.jpg';

info=imfinfo(filename2);

width2=info.Width;

height2=info.Height;

if strcmp(info.ColorType,'grayscale')==1

[A,MAP]=gray2ind(imread(filename2));

RGB2=ind2rgb(A,MAP);

end

if strcmp(info.ColorType,'indexed')==1

[A,MAP]=gray2ind(imread(filename2));

RGB2=ind2rgb(A,MAP);

end

if strcmp(info.ColorType,'truecolor')==1

[A,MAP]=gray2ind(imread(filename2));

RGB2=ind2rgb(A,MAP);

end

figure,imshow(RGB2);

BW=~im2bw(RGB1);

figure;imshow(BW);

B=imfill(imfill(BW,[1,1],4),[1,width1],4);

B=~xor(BW,B);

A=im2double(RGB1);

D=zeros(height1,width1);

K=3;

for i=1:1:height1

    for j=1:1:width1

        if B(i,j)==0

            A(i,j,1)=0;

            A(i,j,2)=0;

            A(i,j,3)=1.0;

        else

            for K=1:1:K

                N(k)=B(i,j+k-round(K/2));

            end

            if ~all(N)

                if~isempty(find(N==1, 1))

                    k1=1;k2=-1;

                    while 1

                        r=A(i,j+k1,1);

                        g=A(i,j+k1,2);

                        b=A(i,j+k1,3);

                        if B(i,j+k1)==1

                            break;

                        end

                        r=A(i,j+k2,1);

                        g=A(i,j+k2,2);

                        b=A(i,j+k2,3);

                        if B(i,j+k2)==1

                            break;

                        end

                        k1=k1+1;k2=k2-1;

                    end

                    A(i,j,1)=r;

                    A(i,j,2)=g;

                    A(i,j,3)=b;

                end

            end

        end

    end

end

x=280;y=100;

RGB=im2double(RGB2);

for i=1:1:height1

    for j=1:1:width1

        if B(i,j)==1

            if D(i,j)==1

                RGB(y+i,x+j,1)=0.5*A(i,j,1)+0.5*RGB(y+i,x+j,1);

                RGB(y+i,x+j,2)=0.5*A(i,j,2)+0.5*RGB(y+i,x+j,2);

                RGB(y+i,x+j,3)=0.5*A(i,j,3)+0.5*RGB(y+i,x+j,3);

            else

                RGB(y+i,x+j,1)=A(i,j,1);

                RGB(y+i,x+j,2)=A(i,j,2);

                RGB(y+i,x+j,3)=A(i,j,3);

            end

        end

    end

end

figure;imshow(RGB); 

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

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

相关文章

《python语言程序设计》2018版第8章第15题商业:检测ISBN-10一个国际标准书号

这个作者一天净出幺蛾子.我这边还老打错字,我现在都不敢用缩写,都是全拼 str_vis_text "013601267" len_num len(str_vis_text)def run_text(num_t, text_about):text_sum 0for i in range(0, num_t):text_sum if_digit(text_about[i])*(i1)print(text_sum%11)pr…

Python框架Pandas:DataFrame的应用

一、DataFrame DataFrame是什么? 1.1 DataFrame的创建 1.1.1 方式一:使用字典加列表创建df,使用默认自增索引 import pandas as pd # 使用字典加列表创建df,使用默认自增索引 df1_data {日期:[2021-08-21,2021-08-22,2021-0…

应用连接错误,初始化mysql数据库恢复---惜分飞

有人在部署一个新网站的时候,写错了配置信息,直接导致原有数据库被清掉,并创建了新库和写入了数据(其实本质就是drop table恢复) 登录操作系统查看,发现数据库文件在根分区,创建了新库,写入了数据之外,还有几个G的binlog.全部恢复不太可能,最后客户决定需要恢复的2个核心表数…

如何将写好的Java代码打成jar包放在hadoops上运行

1、打包java文件 2、jar包上传,hadoop执行 我们将打好的jar包上传到Linux,因为hadoop是安装在Linux上的,然后用hadoop执行,执行前要确保已经在Linux上配置了hadoop的环境变量,不然就要到hadoop的目录下执行该命令 执…

记一次Hiveserver2连接异常的解决-腾讯云-emr

原文阅读:【巨人肩膀社区博客分享】记一次Hiveserver2连接异常的解决-腾讯云-emr 离线任务跑的好好的,忽然有一天失败了,查看海豚上的任务执行日志发现是hiveserver2连接超时了。 查看监控发现了几个问题一个是GC变得频繁,另一个…

Mac电脑剪切板在哪里找 苹果电脑剪切板打开教程【详解】

Windows 和 Mac 电脑在使用方式上存在一些差异,许多习惯了 Windows 系统的用户初次接触 Mac 时可能会对某些操作感到困惑。比如,很多人会问:Mac 上的剪贴板在哪里?如果你也有这样的疑问,不妨看看下面这篇关于如何在 Ma…

redis 基本数据类型—string类型

一、介绍 Redis 中的字符串,直接就是按照二进制数据的方式存储的,不会做任何的编码转换。 Redis对于 string 类型,限制了大小最大是512M 二、命令 SET 将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖&#…

系统架构设计师|关于系统架构-002

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师 🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者、腾讯云TDP-KOL、ACDU成员、墨天轮技术专家博主 &#x1f52…

DBeaver 24.2 发布下载,新增功能概览

DBeaver Ultimate Edtion 24.2 Multilingual (macOS, Linux, Windows) - 通用数据库工具 One tool for all data sources 请访问原文链接:https://sysin.org/blog/dbeaver/,查看最新版。原创作品,转载请保留出处。 作者主页:sy…

【局域网投屏】sunshine和moonlight投屏/屏幕共享/扩展屏

主机是sunshine,客机是moonlight,一个太阳一个月光,两者真是太配啦! 下载sunshine sunshine是服务器端,去以下GitHub链接下载windows端的解压缩即用版 https://github.com/LizardByte/Sunshine/releases下载完毕解压…

Linux高级查找、过滤

find 在指定目录下查找文件和目录 基本语法:find [路径] [ 参数] [查找条件] 常用参数 -name 根据文件或目录的名称查找 find /path -name test.txt-iname 与name类似,但忽略大小写-size 根据文件大小查找 find /path -size 10M-user 根据文…

HS光流法原理与实现

1. 前言 人眼观察到物体运动时,物体会在视网膜平面上形成一系列连续变化的图像“流过”视网膜,好像一种光的“流”,所以被称为光流。 光流基于像素点定义,所有光流的集合称为光流场。通过对光流场分析,可以得到物体相对于观察者的运动信息。计算光流场的方法有很多,常见的…

Java中的类型转换 Day4

类型转换 类型转换总结来说就是:自动提升 手动下降 3.1 自动类型转换 自动类型转换需要满足的要求 两种类型相互兼容 例:int类型的取值范围包含了short类型的取值范围 目标类型大于源类型 目标类型的取值范围(等号左边)大于源…

debug对于开发工程师很重要

在日常开发中,总会遇到一些出人意料的bug,程序跑飞,上电就挂,程序没有按预期执行诸如此类的问题,没有好的调试方法,真的很难定位问题,更别说解决了。在这里分享我用过的一些调试方法&#xff0c…

欧几里得算法求最大公约数

两个不全为0的非负整数m,n的最大公约数记为gcd(m,n),代表能够整除(即余数为0)m和n的最大正整数。 计算gcd(m,n)的欧几里得算法: 第一步&#xf…

初识爬虫2

requests学习(未更新完): 小技巧,如果你用的也是pycharm,对于控制台输出页面因为数据很长一行,不方便进行查看, 可以让它自动换行: 1.requests文档阅读学习链接:快速上…

linux 脱机

先安装 screen apt-get install screen

【网络】网络通信的传输方式

目录 1.网络通信中的两种基本通信模式 1.1.怎么理解连接 1.2.面向有连接类型 1.3.面向无连接类型 2.实现这两种通信模式的具体交换技术 2.1.电路交换 2.2.分组交换 3.根据接收端数量分类 单播(Unicast) 广播(Broadcast) …

8、值、指针、引用作为参数或返回值

一、作为参数 1、值传递 #include <iostream> using namespace std;void swap(int a, int b) {cout << __FUNCTION__ << "交换前a:" << a << " b:" << b << endl;int tmp a;a b;b tmp;cout << __FUN…

98.游戏的启动与多开-分析与实现多开器

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;97.游戏的启动与多开-共享内存多开检测 以 97.游戏的启动与多开-共享内存多开检测 它的…