深度学习机器学习图像处理

第 16 章 基于Hu不变矩的图像检索技术处理算法实现

不变矩(Invariant Moments)是一处高度浓缩的图像特征,具有平移、灰度、尺度、旋转不变性。M.K.Hu在1961年首先提出了不变矩的概念。1979年M.R.Teague根据正交多项式理论提出了Zernike矩。

函数整理:
% 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

Hu不变矩

“Hu不变矩 Hu 距值具有旋转、缩放、镜像和平移不变性,也就是说相同或相似的形状经过旋转、缩放、平移变换后,其 Hu 矩值不变。对于彩色帐篷形状固定的障碍物,在无人机飞行过程中会产生缩放、平移等变化,但其 Hu 矩值变化不大;而对于火焰由于其面积和轮廓的无规律变化,其 Hu 矩值也会呈相应的无规律变化。Hu 矩是通过二阶和三阶中心矩可求得 7 个不变矩组.
类似于图像的选择缩放仿射变化等空间域处理。

部分参考:
https://blog.csdn.net/purgle/article/details/50976268
https://www.csdn.net/tags/NtjaYgxsMzQ2My1ibG9n.html

图像预处理图像预处理主要包括图像灰度化、二值化操作,为后续的不变矩计算提供了图像数据。本案例采用MATLAB库函数rbg2gray进行图像灰度化操作, 采用im2bw进行图像二值化操作。
3.2 计算不变矩根据图像不变矩计算公式,可直接将图像视为数据矩阵进行计算。
3.3 图像检索图像不变矩计算完毕后,就需要根据其特征数据进行图像检索。本案例对图像数据库进行特征计算、对比特征值向量、计算相关度来进行检索。
3.4 结果分析图像检索完毕后,对检索结果根据其相关度排序并进行显示。通过实验可以看出,选择Hu不变矩作为特征来进行图像检索具有执行效率高、检索结果有效的特点。对于不同的图像,经过一系列的预处理流程,计算其Hu特征向量,再与原图像库数据进行比较, 提取To pl 0结果图像作为输出, 能在一定程度上反映图像检索的流程,具有一定的使用价值。
前六个不变矩公式如图所示

最终实现效果如图所示:


计算图像的Hu不变矩

function vec = get_hu_vec(im)
% 计算图像的Hu不变矩
if ndims(im) == 3im = rgb2gray(im);
end
im = double(im);
m00 = sum(sum(im));
m10 = 0;
m01 = 0;
[row,col] = size(im);
for i = 1:rowfor j = 1:colm10 = m10+i*im(i,j);m01 = m01+j*im(i,j);end
end
u10 = m10/m00;
u01 = m01/m00;
m20 = 0;
m02 = 0;
m11 = 0;
m30 = 0;
m12 = 0;
m21 = 0;
m03 = 0;
for i = 1:rowfor j = 1:colm20 = m20+i^2*im(i,j);m02 = m02+j^2*im(i,j);m11 = m11+i*j*im(i,j);m30 = m30+i^3*im(i,j);m03 = m03+j^3*im(i,j);m12 = m12+i*j^2*im(i,j);m21 = m21+i^2*j*im(i,j);end
end
y11 = m11-u01*m10;
y20 = m20-u10*m10;
y02 = m02-u01*m01;
y30 = m30-3*u10*m20+2*u10^2*m10;
y12 = m12-2*u01*m11-u10*m02+2*u01^2*m10;
y21 = m21-2*u10*m11-u01*m20+2*u10^2*m01;
y03 = m03-3*u01*m02+2*u01^2*m01;
n20 = y20/m00^2;
n02 = y02/m00^2;
n11 = y11/m00^2;
n30 = y30/m00^2.5;
n03 = y03/m00^2.5;
n12 = y12/m00^2.5;
n21 = y21/m00^2.5;
h1 = n20 + n02;
h2 = (n20-n02)^2 + 4*(n11)^2;
h3 = (n30-3*n12)^2 + (3*n21-n03)^2;
h4 = (n30+n12)^2 + (n21+n03)^2;
h5 = (n30-3*n12)*(n30+n12)*((n30+n12)^2-3*(n21+n03)^2)+(3*n21-n03)*(n21+n03)*(3*(n30+n12)^2-(n21+n03)^2);
h6 = (n20-n02)*((n30+n12)^2-(n21+n03)^2)+4*n11*(n30+n12)*(n21+n03);
h7 = (3*n21-n03)*(n30+n12)*((n30+n12)^2-3*(n21+n03)^2)+(3*n12-n30)*(n21+n03)*(3*(n30+n12)^2-(n21+n03)^2);
vec = [h1 h2 h3 h4 h5 h6 h7];
% 归一化处理
vec = vec ./ sum(vec);

子函数:

function filePath = OpenImageFile(imgfilePath)
% 打开文件
% 输出参数:
% filePath——文件路径if nargin < 1imgfilePath = fullfile(pwd, 'images/im1.bmp');
end
[filename, pathname, ~] = uigetfile( ...{ '*.bmp;*.jpg;*.tif;*.png;*.gif','All Image Files';...'*.*',  '所有文件 (*.*)'}, ...'选择视频文件', ...'MultiSelect', 'off', ...imgfilePath);
filePath = 0;
if isequal(filename, 0) || isequal(pathname, 0)return;
end
filePath = fullfile(pathname, filename);

检索函数:

function ind_dis_sort = SearchResult(vec_hu, vec_color, H)
% 图像检索
vec_hus = cat(1, H.vec_hu);
vec_colors = cat(1, H.vec_color);
% 分别计算Hu、颜色的距离差异
vec_hu = repmat(vec_hu, size(vec_hus, 1), 1);
vec_color = repmat(vec_color, size(vec_colors, 1), 1);
dis_hu = sum((vec_hu-vec_hus).^2, 2);
dis_color = sum((vec_color-vec_colors).^2, 2);
% 按比例加权整合
rate = 0.1;
dis = rate*mat2gray(dis_hu) + (1-rate)*mat2gray(dis_color);
% 排序,将相似的,差异度小的,排在前面
[~, ind_dis_sort] = sort(dis);

颜色特征处理函数

function vec = get_color_vec(im)
% 获取hsv空间矩阵
hsv = rgb2hsv(im);
h = hsv(:,:,1);
s = hsv(:,:,2);
v = hsv(:,:,3);
% 将h变换为角度空间
h = h*360;
H = zeros(size(h));
S = zeros(size(s));
V = zeros(size(v));
% H进行8级量化
H(h<=20 | h>315) = 0;
H(h<=40 & h>20) = 1;
H(h<=75 & h>40) = 2;
H(h<=155 & h>75) = 3;
H(h<=190 & h>155) = 4;
H(h<=271 & h>190) = 5;
H(h<=295 & h>271) = 6;
H(h<=315 & h>295) = 7;
% S进行3级量化
S(s<=0.2 & s>0) = 0;
S(s<=0.7 & s>0.2) = 1;
S(s<=1.0 & s>0.7) = 2;
% V进行3级量化
V(v<=0.2 & v>0) = 0;
V(v<=0.7 & v>0.2) = 1;
V(v<=1.0 & v>0.7) = 2;
% 加权整合,范围[0,71]
L = 9*H + 3*S + V;
W = zeros(size(L));
% L进行12级量化
W(L<6 & L>=0) = 0;
W(L<12 & L>=6) = 1;
W(L<18 & L>=12) = 2;
W(L<24 & L>=18) = 3;
W(L<30 & L>=24) = 4;
W(L<36 & L>=30) = 5;
W(L<42 & L>=36) = 6;
W(L<48 & L>=42) = 7;
W(L<54 & L>=48) = 8;
W(L<60 & L>=54) = 9;
W(L<66 & L>=60) = 10;
W(L<72 & L>=66) = 11;
vec = zeros(1, 12);
for i = 0 : 11% 统计直方图Wi = find(W==i);vec(i+1) = numel(Wi);
end
% 归一化处理
vec = vec ./ sum(vec);

程序目录树:

案例应用2


数据库部分文件截图说明:

本文使用所有源代码打包下载–>传送门

第16章-基于Hu不变矩的图像检索技术处理算法实现相关推荐

  1. 《MATLAB智能算法30个案例》:第16章 基于动态粒子群算法的动态环境寻优算法

    <MATLAB智能算法30个案例>:第16章 基于动态粒子群算法的动态环境寻优算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例 ...

  2. 《MATLAB智能算法30个案例》:第2章 基于遗传算法和非线性规划的函数寻优算法

    <MATLAB智能算法30个案例>:第2章 基于遗传算法和非线性规划的函数寻优算法 1. 前言 2. MATLAB 仿真示例一 3. MATLAB 仿真示例二 4. MATLAB 仿真示例 ...

  3. 金城教授:基于手绘草图的图像检索技术研究

    5 月 26 日下午,在第二十八期七牛云架构师实践日,金城教授进行了<基于手绘草图的图像检索技术研究>为题的演讲.本文是对演讲内容的整理. 作者介绍: 金城,复旦大学计算机科学技术学院教授 ...

  4. 基于Pxa270和Qt图形界面技术的人脸识别与密码电子锁的门禁系统

    目 录 第1章 绪论 1 1.1 应用背景 1 1.2 系统描述 1 1.2.1 系统方案 1 1.2.2 系统主要功能描述 2 1.3 性能指标 2 1.4 系统特色 3 1.4.1 充分利用班上资 ...

  5. mySQL 教程 第16章 MySQL复制

    第16章 MySQL复制 复制解决的问题 概述:你的网站访问量非常大,对系统的稳定性非常高,那么可以使用mysql功能的复制功能,复制是指将主要的数据库的DDL和DML操作通过二进制日志传到复制服务器 ...

  6. fpga驱动rgb液晶屏_正点原子开拓者FPGA开发板资料连载第五十四章基于的数字识别实验...

    1)实验平台:正点原子开拓者FPGA 开发板 2)摘自<开拓者FPGA开发指南>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载地址:http://www.o ...

  7. 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第15章-基于竞争关系的离散异构多智能体系统分组一致性

    第14章 回到目录 第16章 第15章-基于竞争关系的离散异构多智能体系统分组一致性 15.1 引言 15.2 预备知识 15.3 问题描述与分析 15.4 例子与数值仿真 15.5 本章小结 15. ...

  8. python基础学习[python编程从入门到实践读书笔记(连载五)]:数据可视化项目第16章

    文章目录 下载数据 制作全球地震散点图:JSON格式 end 几个实验结果: 每日最高气温: 地震图绘制: 下载数据 CSV文件格式 在文本文件中存储数据,一个简单方式是将数据作为一系列以逗号分隔的值 ...

  9. python编程16章_Python核心编程——Chapter16

    好吧,在拜读完<Python网络编程基础>之后,回头再搞一搞16章的网络编程吧. Let's go! 16.4.修改书上示例的TCP和UDP客户端,使得服务器的名字不要在代码里写死,要允许 ...

最新文章

  1. APP Store案例数据分析
  2. 逃离无声的世界,跟AI一起听叶落的声音
  3. Asp.net 不安全端口 解决chrome浏览器访问时提示:ERR_UNSAFE_PORT
  4. Html制作知识库管理系统,HTML 编辑器
  5. 以《英雄联盟》为例,看影响MOBA游戏策略的3个层面
  6. [python] 解决pip install download速度过慢问题 更换豆瓣源
  7. python中的range_python中range()与xrange()用法分析
  8. 01_SpringCoud 整合SpringCoud alibaba Nacos
  9. 使用Fastjson提示No serializer found for class
  10. is running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physical memory used; 2.6 GB
  11. java数组长度最大值,javase-获取数组最大值
  12. 关于提高社交网站SNS竞争力的分析
  13. bin文件转dat文件
  14. 2018年大数据趋势 :人工智能... 数据分析将包含可视化模型...
  15. IT售前工程师需要掌握哪些技术
  16. 数据中台在企业数字化转型中的践行(上篇)
  17. JQuery滚动条及位置相关方法
  18. PDFCrackers Plus版
  19. 分辨率与屏幕尺寸之间的关系
  20. 1分钟免费开通IDaaS云服务

热门文章

  1. stickup效果的实现
  2. Mapabc地图----展示地图上的所有点
  3. PMP考试一定要报培训机构吗?
  4. 43道Python经典案例题(有答案)
  5. centos下使用glog
  6. Pulsar知识整理
  7. 曾经被微信打得溃不成军的米聊现在活得还好么
  8. 凤凰金融发布新战略,更近社会民生
  9. Eclipse Validating的作用及优化
  10. vnpy本地导入csv数据