【图像检索】matlab基于Hu不变矩的图像检索技术【源码16期】

一、简介

matlab基于Hu不变矩的图像检索技术,本文介绍了基于内容的图像检索的基础知识,通过提取图像特征并进行建库来智能检索。在形状轮廓的基础上,进行改进的Hu矩的形状特征提取与检索方法。首先,对图像进行预处理,利用多阂值颜色分割法提取出图像的前景对象,再采用轮廓跟踪法得到该对象的形状轮廓特征:然后,计算7个不变矩,组成图像的特征向量:最后,用欧氏距离度量图像间的相似度。实验结果表明,该方法具有较好的检索效果可以有效的检索出相似的图像,具有一定的价值。

二、部分源码

function varargout = MainForm(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
    'gui_Singleton',  gui_Singleton, ...
    'gui_OpeningFcn', @MainForm_OpeningFcn, ...
    'gui_OutputFcn',  @MainForm_OutputFcn, ...
    'gui_LayoutFcn',  [] , ...
    'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

function MainForm_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
InitAxes(handles);
handles.filePath = 0;
handles.vec_hu = 0;
handles.vec_color = 0;
handles.Img = 0;
handles.ind_dis_sort = 0;
handles.page = 0;
handles.H = 0;
guidata(hObject, handles);

function varargout = MainForm_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function pushbutton7_Callback(hObject, eventdata, handles)
if handles.page < 2
    return;
end
page = handles.page;
ind_dis_sort = handles.ind_dis_sort;
H = handles.H;
page = page - 1;
st = (page-1)*8+1;
et = page*8;
for i = st : et
    file = fullfile(pwd, sprintf('%s', H(ind_dis_sort(i)).filename));
    Img = imread(file);
    imshow(Img, [], 'parent', eval(sprintf('handles.axes%d', (i-(page-1)*8)+1)));
    axes(eval(sprintf('handles.axes%d', (i-(page-1)*8)+1)));
    title(sprintf('%02d', i));
end
handles.ind_dis_sort = ind_dis_sort;
handles.page = page;
guidata(hObject, handles);
set(handles.textpage, 'String', sprintf('第%d页/共2页', page));

function pushbutton8_Callback(hObject, eventdata, handles)
if handles.page >= 2
    return;
end
page = handles.page;
ind_dis_sort = handles.ind_dis_sort;
H = handles.H;
page = page + 1;
st = (page-1)*8+1;
et = page*8;
for i = st : et
    file = fullfile(pwd, sprintf('%s', H(ind_dis_sort(i)).filename));
    Img = imread(file);
    imshow(Img, [], 'parent', eval(sprintf('handles.axes%d', (i-(page-1)*8)+1)));
    axes(eval(sprintf('handles.axes%d', (i-(page-1)*8)+1)));
    title(sprintf('%02d', i));
end
handles.ind_dis_sort = ind_dis_sort;
handles.page = page;
guidata(hObject, handles);
set(handles.textpage, 'String', sprintf('第%d页/共2页', page));

function pushbutton2_Callback(hObject, eventdata, handles)
start_path = fullfile(pwd, 'database');
dialog_title = '选择数据库';
folder_name = uigetdir(start_path,dialog_title);
if isequal(folder_name, 0)
    return;
end
db_file = fullfile(folder_name, 'H.mat');
if ~exist(db_file, 'file')
    msgbox('未找到特征数据库,请进行特征提取操作!', '提示信息');
    return;
end
load(db_file);
handles.folder_name = folder_name;
handles.H = H;
guidata(hObject, handles);
msgbox('选择数据库成功!', '提示信息');

function pushbutton3_Callback(hObject, eventdata, handles)
if isequal(handles.Img, 0)
    return;
end
vec_hu = get_hu_vec(handles.Img);
handles.vec_hu = vec_hu;
guidata(hObject, handles);
msgbox('提取Hu特征成功!', '提示信息');

function pushbutton4_Callback(hObject, eventdata, handles)
if isequal(handles.Img, 0)
    return;
end
vec_color = get_color_vec(handles.Img);
handles.vec_color = vec_color;
guidata(hObject, handles);
msgbox('提取颜色特征成功!', '提示信息');

function pushbutton5_Callback(hObject, eventdata, handles)
if isequal(handles.vec_hu, 0) || isequal(handles.vec_color, 0)
    return;
end
ind_dis_sort = SearchResult(handles.vec_hu, handles.vec_color, handles.H);
H = handles.H;
page = 0;
page = page + 1;
st = (page-1)*8+1;
et = page*8;
for i = st : et
    file = fullfile(pwd, sprintf('%s', H(ind_dis_sort(i)).filename));
    Img = imread(file);
    imshow(Img, [], 'parent', eval(sprintf('handles.axes%d', (i-(page-1)*8)+1)));
    axes(eval(sprintf('handles.axes%d', (i-(page-1)*8)+1)));
    title(sprintf('%02d', i));
end
handles.ind_dis_sort = ind_dis_sort;
handles.page = page;
guidata(hObject, handles);
set(handles.textpage, 'String', sprintf('第%d页/共2页', page));

三、运行结果

四、matlab版本

MATLAB R2019a

五、学习与交流

文中不足之处请大家多多指教,学习与交流可以联系企鹅:3752243968
文中部分源码仅供参考,若需要全部代码可以私信

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值