【图像检索】基于Hu不变矩实现图像检索matlab代码

1 简介

描述了一种基于 Hu 形状不变矩的图像全局形状特征提取方法和算法 IMS 。实验结果表明, 使用 IMS 。 算法提取的形状特征向量具有对平移、旋转和尺度变化的不变性, 适合于进行图像形状的检索 。

2 部分代码

function varargout = MainForm(varargin)
% MAINFORM MATLAB code for MainForm.fig
%     MAINFORM, by itself, creates a new MAINFORM or raises the existing
%     singleton*.
%
%     H = MAINFORM returns the handle to a new MAINFORM or the handle to
%     the existing singleton*.
%
%     MAINFORM('CALLBACK',hObject,eventData,handles,...) calls the local
%     function named CALLBACK in MAINFORM.M with the given input arguments.
%
%     MAINFORM('Property','Value',...) creates a new MAINFORM or raises the
%     existing singleton*. Starting from the left, property value pairs are
%     applied to the GUI before MainForm_OpeningFcn gets called. An
%     unrecognized property name or invalid value makes property application
%     stop. All inputs are passed to MainForm_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 MainForm

% Last Modified by GUIDE v2.5 05-Apr-2015 17:23:30

% Begin initialization code - DO NOT EDIT
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
% End initialization code - DO NOT EDIT


% --- Executes just before MainForm is made visible.
function MainForm_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 MainForm (see VARARGIN)

% Choose default command line output for MainForm
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;
% Update handles structure
guidata(hObject, handles);
% javaFrame = get(hObject, 'JavaFrame');
% javaFrame.setFigureIcon(javax.swing.ImageIcon('MainForm.jpg'));
% UIWAIT makes MainForm wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = MainForm_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 button press in pushbutton7.
function pushbutton7_Callback(hObject, eventdata, handles)
% hObject   handle to pushbutton7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)
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));

% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
% hObject   handle to pushbutton8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)
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));

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject   handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)
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('选择数据库成功!', '提示信息');

% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject   handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)
if isequal(handles.Img, 0)
   return;
end
vec_hu = get_hu_vec(handles.Img);
handles.vec_hu = vec_hu;
guidata(hObject, handles);
msgbox('提取Hu特征成功!', '提示信息');

% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject   handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)
if isequal(handles.Img, 0)
   return;
end
vec_color = get_color_vec(handles.Img);
handles.vec_color = vec_color;
guidata(hObject, handles);
msgbox('提取颜色特征成功!', '提示信息');

% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject   handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)
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));

% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
% hObject   handle to pushbutton6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)
choice = questdlg('确定要退出系统?', ...
   '退出', ...
   '确定','取消','取消');
switch choice
   case '确定'
       close;
   case '取消'
       return;
end

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject   handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)
filePath = OpenImageFile();
if isequal(filePath, 0)
   return;
end
if ~isequal(handles.filePath, 0)
   InitAxes(handles);
end
handles.filePath = 0;
handles.vi = 0;
handles.Img = 0;
handles.ind_dis_sort = 0;
handles.page = 0;

[Img, map] = imread(filePath);
if ~isempty(map)
   Img = ind2rgb(Img, map);
end
imshow(Img, [], 'parent', handles.axes1);
handles.filePath = filePath;
handles.Img = Img;
guidata(hObject, handles);

3 仿真结果

4 参考文献

[1]张恒博, 商周, and 李灵华. "一种基于改进Hu矩的图像检索方法." 大连民族学院学报 13.5(2011):4.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于特征融合的图像检索系统是利用多种图像特征来进行图像相似度匹配的一种方法,可以增强图像检索的准确性和鲁棒性。下面是一个简单的matlab代码实现: ```matlab % 读取图像库的图像 imds = imageDatastore('image_folder'); % 提取图像特征 features = []; for i = 1:length(imds.Files) img = readimage(imds, i); % 提取图像特征,可以使用颜色直方图、纹理特征、形状特征等 feat1 = extractColorHistogram(img); feat2 = extractTextureFeature(img); feat3 = extractShapeFeature(img); % 将多种特征融合成一个特征向量 feature = [feat1, feat2, feat3]; features = [features; feature]; end % 对查询图像进行相同的特征提取 query_img = imread('query_image.jpg'); query_feat1 = extractColorHistogram(query_img); query_feat2 = extractTextureFeature(query_img); query_feat3 = extractShapeFeature(query_img); query_feature = [query_feat1, query_feat2, query_feat3]; % 计算相似度 similarities = []; for i = 1:size(features, 1) % 计算查询图像特征与图像库每个图像特征的相似度 similarity = calculateSimilarity(query_feature, features(i, :)); similarities = [similarities, similarity]; end % 根据相似度排序返回相似图像 [sorted_similarities, indices] = sort(similarities, 'descend'); top_k = 10; similar_images = imds.Files(indices(1:top_k)); ``` 以上代码演示了如何使用matlab实现基于特征融合的图像检索系统。首先从图像库提取图像特征,并将多种特征融合成一个特征向量。然后对查询图像进行相同的特征提取,计算查询图像特征与图像库每个图像特征的相似度,最后根据相似度排序返回相似图像。这种方法可以提高图像检索的准确性和鲁棒性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值