一、综合颜色和形状特征图像检索简介

0 引言
随着多媒体技术与网络技术的发展, 基于内容的图像检索(Content-Based Image Retrieval, CBIR) 技术作为信息检索技术重要的一部分, 成为国际国内的研究热点,其主要利用图像的视觉特征如颜色、纹理、形状和空间关系等搜索图像库中与待查询图像相似的图像,颜色是图像最底层、最显著的特
征,形状是彩色图像最稳定的特征,其不受亮度等环境变化的影响。
CBIR算法主要考虑的是待查询图像与图像库中图像的相似度, 但是有时候却忽略了图像库中已存在图像之间的相似性, 如果利用聚类算法将图像库中的图像聚类, 使得检索过程在类心或某一类内进行, 就会降低图像检索的空间, 提高检索的速度。聚类算法在图像检索领域中有广泛的应用, K-means算法应用最广,其优点是通用、聚类速度快,保证以二次收敛的速度终止,但缺点是终止于一个局部最小值,对初始类心依赖性强,导致检索结果不稳定。近几年,出现了许多基于K-means算法的图像检索算法 。文献主要提出了平均面积直方图的概念, 然后基于图像密度函数确定初始聚类中心, 按照K-means思想迭代优化, 对特征提取方法的改进提高了检索的准确性, 但是初始类心的确定方式使得算法的时间复杂度较大。文献针对K-means随机选取初始值导致聚类结果不稳定的特点,根据特征距离累加和最大选取初始聚类中心,保证了检索结果的稳定性,提高了检索的准确性,但是检索的效果从绝对意义上来说还有待提高。文献提出了基于区域分割的方法, 利用K-means算法对像素进行聚类进而形成基于局部的特征信息, 然后利用分层聚类算法将相似的物体特征进行聚类,取代了传统的基于图像整体信息的聚类,但是基于像素的处理,以及算法的迭代特性,导致其时间复杂度较大,提取基于局部的特征信息的时候信息丢失量较大,检索精度有待提高。以上算法还有不足,颜色直方图信息丢失量大,特征提取效果较差,而且仅仅通过单一的图像特征难以有效全面地描述图像内容信息和
获得理想的图像检索性能, K-means算法只是考虑了同一类图像的相似性, 并没有考虑不同图像的差异性, 导致其没有更好的检索效果。
鉴于上述情况,本文提出了综合颜色和形状特征的图像检索算法,利用改进的颜色聚合向量提取颜色特征,着重考虑了颜色空间的分布信息,利用Hu不变矩的改进算法提取图像的形状特征,着重考虑了图像中物体的形状信息,该算法基于贡献度聚类且建立综合特征索引库,减少对图像库的访问次数,其迭代特性保证了较低的时间杂性。

1 颜色量化
在图像检索领域,颜色空间需要压缩进而通过一种更紧凑的方式描述,即对颜色空间进行量化,在不改变主观感受的情况下减小存储量并能提高处理速度。HSV空间能较好地反映人眼对颜色的感知和鉴别能力, 非常适合基于颜色的图像相似比较。
首先将RGB颜色转换为HSV, 然后进行量化。人眼对颜色的色调(H) 非常敏感, 主要描述图像的颜色特征, 色调独立于观察点, 所以要细量化。亮度(V) 反
映了图像的形状特征, 不依赖于图像的颜色信息, 所以量化不能太粗。根据HSV颜色空间的特性作以下非均匀量化, 共获得2+12*6×2=146种颜色。

量化之后利用公式Q=2+12H+6S+V对颜色进行编码, 编码范围为0~145, V<0.1的颜色为黑色, 编码为0, s<0.2且v>0.9的颜色为白色, 编码为1。利用此方法对颜色量化易于计算、符合人眼视觉、减少颜色冗余、失真小, 如图1所示。

图1 量化前后对比
2颜色特征
Pass等[13] 提出了颜色聚合向量(Color Coherence Vector, CCV) , 弥补了颜色直方图无法表达颜色分布空间位置[14] 的缺点, 主要是基于像素的空间关系将直方图的每个颜色簇划分为聚合和非聚合两部分,如果一个连通区域的像素个数超出了阈值T,则认为该区域的像素是聚合的,否则将被判为非聚合的。整幅图像的像素个数N和阈值t的关系一般为:T=0.01N[13]。基于对颜色分布的空间信息的重视, 改进的颜色聚合向量(Improved Color Coherence Vector, ICCV) 算法考虑到聚合像素所处的连通区域以及非聚合像素所处的非连通区域,对颜色Qk作4-连通标记处理,根据阈值找到其连通域个数c(Qk)、非联通域个数n(Qk)以及聚合数目ak、非聚合数目βk,则Qk的平均聚合数目为M。(Qk)=ak/(c(Qk)N),平均非聚合数目为Mn(Qk)=Bk/(n(Qk)N),为了使其不受图像尺度变化的影响,对其作了归一化处理。如果c(Qk)=0或n(Qk)=0, 则M。(Qk) =0或Mn(Qk) =0, 图像的ICCV为:(Qk, Mc(Qk) , Mn(Qk) ) , 其中k=1, 2, …, 146, Qk=0, 1, …, 145, 所以可以用146维的向量来表示一幅图像的颜色特征。如图2所示,黑色代表量化之后编码值为Qk的像素,设阈值为3,则ak都为12,c(Qk)分别为4、1、2,βk都为4,n(Qk)分别为4、2、3,得到M。(Qk)分别为12/(4N) 、12/N、12/(2N) , Mn(Qk) 分别为4/(4N) 、4/(2N) 、4/(3N) , 所以ICCV分别为(Qk, 12/(4N) , 4/(4N) ) 、(Qk, 12/N, 4/(2N) ) 、(Qk,12/(2N),4/(3N) ) 。如果用颜色直方图表示都为(Qk, 16/N) , 用CCV表示都为(Qk, 12/N, 4/(N) ) 。但是可以看到三幅图像完全不同, 所以ICCV的表示更加准确。

图2 三种图像样图
3 形状特征
3.1不变矩
矩是对图像的一种统计形式, 可以从全局描述整个对象的整体特性, 矩不变量的表示形式很多, 如Legendre矩、Zernike矩、伪Zernike矩等。在图像处理中,几何不变矩可以作为一个重要的特征来表示物体,可以据此特征来对图像进行分类等操作,本文用改进的Hu不变矩方法[15]提取图像的形状特征,不变矩的主要思想是使用对变换不敏感的基于区域的几个矩作为形状特征,对于一幅图像F(x,y),F(x,y)为点(x,y)的灰度值,它的阶矩定义为:

如果将图像的灰度值看作是一个二维或三维的密度分布函数, 那么矩方法即可用于图像分析领域并用作图像特征的提取。最常用的, 物体的零阶矩表示了图像的“质量”:M0, 0=∫∫F (x, y) dxdy, 一阶矩 (M0, 1, M1, 0) 用于确定图像质心 (xc, yc) ;若将坐标原点移至xc和yc处, 就得到了对于图像位移不变的p+q阶中心矩up, q:

其中:xc=m1, 0/m0, 0, yc=m0, 1/m0, 0, F (x, y) 规格化的中心矩可以表示为ηp, q=μp, q/μ0γ, 0, 其中γ= (p+q+2) /2, p+q=2, 3, …, 将归一化的二阶矩和三阶矩组合得到7个经典的对平移、旋转和尺度变化的不变矩, 如式 (3) 所示:

由于图像大小会影响不变矩的特征值, 因此在提取之前应该将图像库中的图像尺寸规范化为相同尺寸。计算Hu不变矩特征量的过程如图3所示。

图3 图像Hu不变矩提取流程
为了提高图像检索的准确度, 文献[15]参照不变矩定义了图像的离心率特征量e, 如式 (4) 所示:

离心率特征e表示了图像的最大轴方向与最小轴方向的比率,同样也满足物体仿射(平移、旋转、尺度)不变性。将不变矩特征量中个~中7和离心率e合并,就形成了图像的全局形状特征(中1,中2,中3,中4,P5,中6,中7,e)。

3.2 形状特征归一化
全局形状特征矢量中各个元素的幅度值都是不一样的,由此将会使得图像的相似性匹配的结果出现误差,形状特征的归一化的目的就是对该误差进行修正。文献[16]提到了对7个不变矩的归一化处理,利用其思想,如果用(A1,A2,…,AM)来表示图像库中的M幅图像,就获得了M行8列的图像特征矩阵A=a,j,矩阵的每列相对应的是长度为M的特征序列,求得其标准差和均值分别是oj、uj,在这里,a,j表示的是第i幅图像当中的第j个形状特征元素,利用式(5)对图像的形状特征矢量进行高斯归一化处理。

4 图像的综合特征
已经得到了图像的颜色特征和形状特征,因为要对图像进行聚类,减少图像库的访问次数,将求得的146维的颜色聚合向量与8维的形状特征混合形成154维的综合特征(m1,m2,m3,…,m154),表示一幅图像的综合特征,为了方便计算以及说明,将这8维的形状特征分别看作第147个编码值到154个编码值的纵坐标分量,如果图像库中有M幅图像,则可用下列矩阵表示整个图像库:

二、部分源代码

function varargout = Run(varargin)
% RUN M-file for Run.fig
%      RUN, by itself, creates a new RUN or raises the existing
%      singleton*.
%
%      H = RUN returns the handle to a new RUN or the handle to
%      the existing singleton*.
%
%      RUN('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in RUN.M with the given input arguments.
%
%      RUN('Property','Value',...) creates a new RUN or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Run_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Run_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help Run% Last Modified by GUIDE v2.5 03-Jan-2013 16:06:52% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @Run_OpeningFcn, ...'gui_OutputFcn',  @Run_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before Run is made visible.
function Run_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to Run (see VARARGIN)axes( handles.axes1 ) ;
imshow( 'GUI选择.jpg' ) ;
axes( handles.axes2 ) ;
imshow( 'GUI颜色.jpg' ) ;
axes( handles.axes3 ) ;
imshow( 'GUI形状.jpg' ) ;
axes( handles.axes4 ) ;
imshow( 'GUI纹理.jpg' ) ;
axes( handles.axes9 )
imshow( 'GUI问号.jpg' ) ;
axes( handles.axes5 )
imshow( 'GUI问号.jpg' ) ;
axes( handles.axes6 )
imshow( 'GUI问号.jpg' ) ;
axes( handles.axes7 )
imshow( 'GUI问号.jpg' ) ;
axes( handles.axes8 )
imshow( 'GUI问号.jpg') ;
handles.Chose = 6 ;
guidata(hObject, handles);
handles.To_be_matched = 0 ;
guidata(hObject, handles);
handles.color_w = 0.5 ;
guidata(hObject, handles);
handles.edge_w = 0.01 ;
guidata(hObject, handles);
handles.texture_w =0.01 ;
guidata(hObject, handles);
% Choose default command line output for Run
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes Run wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = Run_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes on slider movement.
function slider_color_Callback(hObject, eventdata, handles)
% hObject    handle to slider_color (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
temp_color_w = get( hObject , 'Value' ) ;
set( handles.edit_color , 'String' , num2str(temp_color_w) ) ;
handles.color_w = temp_color_w ;
guidata( hObject , handles ) ;% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider% --- Executes during object creation, after setting all properties.
function slider_color_CreateFcn(hObject, eventdata, handles)
% hObject    handle to slider_color (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor',[.9 .9 .9]);
end
set ( hObject , 'Value' , 0 ) ;% --- Executes on slider movement.
function slider_edge_Callback(hObject, eventdata, handles)
% hObject    handle to slider_edge (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider
temp_edge_w = get( hObject , 'Value' ) ;
set( handles.edit_edge , 'String' , num2str(temp_edge_w) ) ;
handles.edge_w = temp_edge_w ;
guidata( hObject , handles ) ;% --- Executes during object creation, after setting all properties.
function slider_edge_CreateFcn(hObject, eventdata, handles)
% hObject    handle to slider_edge (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called
% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor',[.9 .9 .9]);
end
set( hObject , 'Value' , 0 ) ;% --- Executes on slider movement.
function slider_texture_Callback(hObject, eventdata, handles)
% hObject    handle to slider_texture (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider
temp_texture_w = get( hObject , 'Value' ) ;
set( handles.edit_texture , 'String' , num2str(temp_texture_w) ) ;
handles.texture_w = temp_texture_w ;
guidata( hObject , handles ) ;% --- Executes during object creation, after setting all properties.
function slider_texture_CreateFcn(hObject, eventdata, handles)
% hObject    handle to slider_texture (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor',[.9 .9 .9]);
end
set( hObject , 'Value' , 0 ) ;function edit_color_Callback(hObject, eventdata, handles)
% hObject    handle to edit_color (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit_color as text
%        str2double(get(hObject,'String')) returns contents of edit_color as a double
value = str2double( get( hObject , 'String' ) ) ;
if isnan(value)msgbox('黄老师,要输入数字才行哦!');set( hObject , 'String' , '0' );set( handles.slider_color , 'Value' , 0 );
elseif value<0 | value >1msgbox('黄老师,只能数入0-1才行哦!');set( hObject , 'String' , '0' );set( handles.slider_color , 'Value' , value );
elseset( handles.slider_color , 'Value' , 0 );handles.color_w = value ;guidata( hObject , handles ) ;
end% --- Executes during object creation, after setting all properties.
function edit_color_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit_color (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction edit_edge_Callback(hObject, eventdata, handles)
% hObject    handle to edit_edge (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit_edge as text
%        str2double(get(hObject,'String')) returns contents of edit_edge as a double
value = str2double( get( hObject , 'String' ) ) ;
if isnan(value)msgbox('黄老师,要输入数字才行哦!');set( hObject , 'String' , '0' );set( handles.slider_edge , 'Value' , 0 );
elseif value<0 | value >1msgbox('黄老师,只能数入0-1才行哦!');set( hObject , 'String' , '0' );set( handles.slider_edge , 'Value' , 0 );
elseset( handles.slider_edge , 'Value' , value );handles.edge_w = value ;guidata( hObject , handles ) ;
end% --- Executes during object creation, after setting all properties.
function edit_edge_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit_edge (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction edit_texture_Callback(hObject, eventdata, handles)
% hObject    handle to edit_texture (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit_texture as text
%        str2double(get(hObject,'String')) returns contents of edit_texture as a double
value = str2double( get( hObject , 'String' ) ) ;
if isnan(value)msgbox('黄老师,要输入数字才行哦!');set( hObject , 'String' , '0' );set( handles.slider_texture , 'Value' , 0 );
elseif value<0 | value >1msgbox('黄老师,只能数入0-1才行哦!');set( hObject , 'String' , '0' );set( handles.slider_texture , 'Value' , 0 );
elseset( handles.slider_texture , 'Value' , value );handles.texture_w = value ;guidata( hObject , handles ) ;
end

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

【图像检索】基于matlab GUI综合颜色和形状特征图像检索【含Matlab源码 395期】相关推荐

  1. 【Matlab图像检索】综合特征图像检索【含GUI源码 395期】

    一.代码运行视频(哔哩哔哩) [Matlab图像检索]综合特征图像检索[含GUI源码 395期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  2. 【图像处理】基于matlab GUI多功能图像处理系统【含Matlab源码 1876期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像处理]基于matlab GUI多功能图像处理系统[含Matlab源码 1876期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  3. 【机械仿真】基于matlab GUI曲柄摇杆机构运动仿真【含Matlab源码 1608期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab GUI曲柄摇杆机构运动仿真[含Matlab源码 1608期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  4. 【光学】基于matlab GUI光栅条纹投影生成【含Matlab源码 2118期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI光栅条纹投影生成[含Matlab源码 2118期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  5. 【机械仿真】基于matlab GUI直齿圆柱齿轮应力计算【含Matlab源码 2077期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab GUI直齿圆柱齿轮应力计算[含Matlab源码 2077期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...

  6. 【天体学】基于matlab GUI太阳天顶角计算【含Matlab源码 2229期】

    一.⛄获取代码方式 获取代码方式1: 完整代码已上传我的资源:[天体学]基于matlab GUI太阳天顶角计算[含Matlab源码 2229期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  7. 【语音去噪】基于matlab GUI IIR滤波器语音去噪【含Matlab源码 1864期】

    一.语音处理简介 语言是人们获得各类有效信息的主要途径, 而语音是语言的表现形式.语音在一定程度上可影响人们的生活, 因此, 语音信号的研究对科学领域和人们日常生活具有一定的研究价值和意义.噪声广泛存 ...

  8. 【身份证识别】基于matlab GUI BP神经网络身份证识别【含Matlab源码 2239期】

    ⛄一.身份证号码识别简介 1 引言 当今是一个信息高度发达的时代,对于每个公民而言身份证那一连串的数字体现了个人信息的唯一性,出于保障公民合法权益和社会治安的考虑,越来越多的行业都开始建立自己的安全保 ...

  9. 【数学建模】基于matlab GUI平行停车模拟仿真【含Matlab源码 1877期】

    一.平行停车模拟仿真简介 近年来, 随着我国经济的快速发展, 机动车保有量也迅速增长.截至2012年底, 全国机动车保有量已达2.4亿辆, 城市"停车难"的问题日趋严重.统计结果表 ...

  10. 【病虫害识别】基于matlab GUI SVM病虫害识别系统【含Matlab源码 2429期】

    ⛄一.基于机器视觉的农作物病害识别技术 1 叶片图像采集 进行农作物病害自动检测与识别首先要对病害叶片的图像进行采集.自动识别的前提是获得数字图像, 数字图像质量的好坏决定着之后叶片病害的识别特征能否 ...

最新文章

  1. python 动态编译代码_使用PyQt(Python+Qt)+动态编译36行代码实现的计算器
  2. 爬虫网页搜索策略的选择
  3. 解决在Ubuntu下打开txt文件乱码的问题
  4. 讲讲JavaScript的闭包
  5. java jpopupmenu事件_Java+Swing+常用事件和监听器接口
  6. Java01-day01【发展史、跨平台原理、JRE和JDK、常用DOS命令、关键字、常量、数据类型、变量使用的注意事项、标识符、类型转换】
  7. 手游特效太多怎么办?这里有一份性能优化方案可参考
  8. 动态代理源码分析,实现自己的动态代理
  9. IOS自动化打包介绍
  10. 函数----MoveWindow
  11. Description Resource Path Location Type The superclass javax.servlet.http.HttpServlet was not foun
  12. 亲身经历:2018年深圳保洁员工资时薪75,月薪不清楚
  13. oracle审计功能启动关闭
  14. 如何短期通过2022年3月PMP考试?
  15. 斐讯k2p openwrt固件改双WAN口
  16. 计算机编程必备英语单词,编程序常用英语单词
  17. 截止失真放大电路_模拟电路-BJT晶体管及电路
  18. What is CRA
  19. pigeon-remoting模块功能分析
  20. 激活MyEclipse 无法运行cracker2018.jar

热门文章

  1. LeetCode-1-two-sum
  2. 获取浏览器的User Anent及判断微信浏览器
  3. 超快的前端引擎——artTemplate-3.0
  4. 通过脚本执行sql语句
  5. 文件磁盘相关函数[11]-获取指定文件的版本号 GetFileVersion
  6. Word新建自己的样式
  7. 190506每日一句
  8. 黑马程序员 Python学习笔记之PyCharm 的初始设置
  9. Atitit 高级人员的指标 参照发达国家(Developed Country)指标 目录 1. 普遍特征是较高的发展指数、人均生产总值、工程化水准和品质 [1]  。科学技术水准等指标 1 2.
  10. Atitit.软件与编程语言中的锁机制原理attilax总结 1. 用途 (Db,业务数据加锁,并发操作加锁。 2 2. 锁得类型 3 2.1. 排它锁 “互斥锁 共享锁 乐观锁与悲观锁 乐观锁: