matlab根据直方图进行图片分类

matlab根据直方图进行图片分类

感觉还有一些bug需要调试,不过还是先写出来吧

将一张图片由rgb转hsv空间,并进行量化

function [Hh,Vv,Ss] = hsv_hist(filename)

% 将rgb转hsv

%clear;

clc;

%filename = 'lena.bmp';

Image = imread(filename);

[M,N,O] = size(Image);

[h,s,v] = rgb2hsv(Image); % 此处的hsv取值范围都介于0和1之间

% 分别对hsv进行量化

% h量化为16级,s量化为4级,v量化为4级

h = h.*360;

H =h;S=s;V=v;

% 对h进行量化得到H,得到的H空间取值范围介于0~15

for i = 1:M

for j =1:N

%i,j为横纵坐标

if h(i,j)<=15||h(i,j)>345

H(i,j) = 16;

end

if h(i,j)<=25&&h(i,j)>15

H(i,j) = 1;

end

if h(i,j)<=45&&h(i,j)>25

H(i,j) = 2;

end

if h(i,j)<=55&&h(i,j)>45

H(i,j) = 3;

end

if h(i,j)<=80&&h(i,j)>55

H(i,j) = 4;

end

if h(i,j)<=108&&h(i,j)>80

H(i,j) = 5;

end

if h(i,j)<=140&&h(i,j)>108

H(i,j) = 6;

end

if h(i,j)<=165&&h(i,j)>140

H(i,j) = 7;

end

if h(i,j)<=190&&h(i,j)>165

H(i,j) = 8;

end

if h(i,j)<=220&&h(i,j)>190

H(i,j) = 9;

end

if h(i,j)<=255&&h(i,j)>220

H(i,j) = 10;

end

if h(i,j)<=275&&h(i,j)>255

H(i,j) = 11;

end

if h(i,j)<=290&&h(i,j)>275

H(i,j) = 12;

end

if h(i,j)<=316&&h(i,j)>290

H(i,j) = 13;

end

if h(i,j)<=330&&h(i,j)>316

H(i,j) = 14;

end

if h(i,j)<=345&&h(i,j)>330

H(i,j) = 15;

end

end

end

% 对s和v进行量化 量化空间为1~4

for i = 1:M

for j = 1:N

if s(i,j)<=0.15&&s(i,j)>0

S(i,j) = 1;

end

if s(i,j)<=0.4&&s(i,j)>0.15

S(i,j) = 2;

end

if s(i,j)<=0.75&&s(i,j)>0.4

S(i,j) = 3;

end

if s(i,j)<=1&&s(i,j)>0.75

S(i,j) = 4;

end

end

end

for i = 1:M

for j = 1:N

if v(i,j)<=0.15&&v(i,j)>0

V(i,j) = 1;

end

if v(i,j)<=0.4&&v(i,j)>0.15

V(i,j) = 2;

end

if v(i,j)<=0.75&&v(i,j)>0.4

V(i,j) = 3;

end

if v(i,j)<=1&&v(i,j)>0.75

V(i,j) = 4;

end

end

end

Hh = zeros(16,1);

for i=1:M

for j =1:N

for k = 1:16

if H(i,j) == k

Hh(k,1) = Hh(k,1) + 1;

break;

end

end

end

end

%至此得到了一幅图像的Hh量化矩阵

Ss = zeros(4,1);

for i = 1:M

for j =1:N

for k = 1:4

if S(i,j) == k

Ss(k,1) = Ss(k,1)+1;

break;

end

end

end

end

Vv = zeros(4,1);

for i = 1:M

for j = 1:N

for k = 1:4

if V(i,j) == k

Vv(k,1) = Vv(k,1) + 1;

break;

end

end

end

end

之后对图片进行比较

function result = compare(filename1, filename2)

% clear

%filename1 = '2416.jpg';

%filename2 = '19.jpg';

[h1,s1,v1] = hsv_hist(filename1);

[h2,s2,v2] = hsv_hist(filename2);

sub_h = sum(abs(h1-h2));

sub_s = sum(abs(s1-s2));

sub_v = sum(abs(v1-v2));

result = (sub_h+sub_v+sub_s)/3;

测试了一下

% 找出100副最相近的图片

clc;

clear;

%待比较的文件

file = '2416.jpg';

directory = 'D:\2019\duomeitiqingbaochuli\homework\image.vary.jpg\image.vary.jpg\';

workspace = 'H:\workspace\matlab\imagepro';

workdir = 'H:\workspace\matlab\imagepro\img';

if exist(workdir)

rmdir(workdir, 's'); %matlab 删除目录和目录下的文件

mkdir(workdir);

else

mkdir(workdir);

end

all_img = dir(directory); %返回的是一个结构体

all_img_size = size(all_img,1)-2; %计算出文件数目

result = zeros(all_img_size,1);

%还是老老实实的拼接文件名

for k = 0:all_img_size-1

filename = [directory, num2str(k), '.jpg'];

result(k+1) = compare(file, filename);

end

% for k =3+2415:all_img_size+2

% filename = all_img(k).name;

% result(k-2,1) = compare(file, [directory, filename]);

% end

%对result进行排序

[V,I] = sort(result);

%取出前100个图片移动到目录下

for k = 1:100

move_file = [directory, num2str(I(k,1)), '.jpg'];

copyfile(move_file,workdir )

end

分类的结果大概如下

matlab根据直方图进行图片分类相关教程

OpenCV4学习笔记(80)——直方图规定化与绘制

OpenCV4学习笔记(80)——直方图规定化与绘制 停更了好久好久的博客,国庆第一天,起床除了祝祖国妈妈生日快乐之外居然有点不知道要干嘛好,刚好看书时发现了OpenCV里没有的一个小功能,那就来写写博客吧。。。 还记得在很久之前的《OpenCV学习笔记(9)》中

奇异值分解(SVD)基础概念及MATLAB仿真

奇异值分解(SVD)基础概念及MATLAB仿真 奇异值分解(singular value decomposition,简称SVD)不仅广泛应用于机器学习领域,也在控制理论中有着广泛的应用。本文主要介绍SVD的基本原理。 文章目录 一、预备知识 1.1 特征值与特征向量 1.2 幺正矩阵(酉矩阵)

实例化FFT(vivado) 以及matlab和fpga的fft结果对比

实例化FFT(vivado) 以及matlab和fpga的fft结果对比 前言 我是fpga小白,在vivado软件上实例化fft单元的时候,走了不少弯路;记录下来,能加深记忆,也希望能够帮助向我一样的小白,快速上手fft。 一、FFT fft就是快速傅里叶变换,具体理论,课堂上课本上博

matlab取色工具getpts

matlab取色工具getpts 文章目录 配色方案 颜色提取 演示 参考 写论文画图,给线条配色是个难题,matlab默认的配色还过得去,自带的像,‘red’,‘blue’,看了实在令人难受,为了给找一些好看的配色方案,网上找了一圈,看到些有用的东西,这里记录一下 配色

MATLAB求解叶型中弧线

MATLAB求解叶型中弧线 对于从事流体力学及相关行业的科研人员来说, 中弧线 这一名词一定耳熟能详,在日常的科研工作中可能会存在着求解某一特定叶型中弧线的需求。本文就简单介绍一下通过等距偏置线求解叶型中弧线的流程。 中弧线的定义 :叶型中所有内切圆

【效率工具】用Python根据excel中数据批量生成word文档(适用劳

【效率工具】用Python根据excel中数据批量生成word文档(适用劳动合同、通知书等应用场景) 大家在工作中一定经常遇到类似的情况: 1、制作劳动合同表,要从excel表格中将每个人的数据导入到docx劳动合同中,重复量很大。 2、制作通知书,从excel表格中将每个

python调用MATLAB库绘制直方图

python调用MATLAB库绘制直方图 直方图(histogram)虽然在样式上类似条形图,但它们的作用不一样。直方图用不同的矩形表示频数,常用来观察一组数据的概率分布。在直角坐标中,用横轴表示数据分组,纵轴表示频数或频率,各组与相应的频数就形成了一个个矩形,

直方图反向投影车牌识别

直方图反向投影车牌识别 思路 1、用已知的模板,提取出感兴趣的区域作为特征图像,并计算这个区域的直方图(OpenCV中calaHist函数只可计算单通道,车牌为蓝色背景,可分离通道后计算蓝色通道) 图一 2、用上述直方图模型来匹配要检测的图片,也就是要检测的车

matlab对直方图分类,matlab根据直方图进行图片分类相关推荐

  1. python学习(18)--图片分类

    图片分类 学习动机. 在这一节中我们会引入图片分类为题.这也是从一个合适的集合中分配给图片一个标记的任务.这是计算机视觉的核心问题之一.鉴于它的简单性,有一大批实用应用.更多的是,我们可以在以后的章节 ...

  2. 使用 matlab 数字图像处理(二)—— 直方图均衡化(极简实现)

    直方图均衡化(Histogram Equalization)是一种实用性极高的直方图修正技术. 直方图均衡化又称为灰度均衡化,是指通过某种灰度映射使输入图像转换为在每一灰度级上都有近似相同的像素点数的 ...

  3. matlab 自定义直方图匹配_matlab中直方图规定化(直方图匹配)的单映射 – MATLAB中文论坛...

    matlab写的一个直方图规定化中的单映射程序,大家可以借鉴下 clc; clear; I=imread('e:\2.bmp'); figure,subplot(321),imshow(I); tit ...

  4. 彩色图像RGB分量直方图分析matlab

    彩色和灰度图像直方图 matlab计算图像直方图有自带函数为imhist() 1.直接显示图像i的灰度直方图:imhist( i ) 2.指定灰度级n显示直方图:imhist(i,n) 在彩色图像加密 ...

  5. 直方图均衡化 matlab代码,基于matlab的直方图均衡化代码

    基于matlab的直方图均衡化代码 2007-04-15 20:15 clear all %一,图像的预处理,读入彩***像将其灰度化 PS=imread('1.jpg');             ...

  6. 【MATLAB】直方图均衡化Matlab实现(非histeq内置函数)

    直方图均衡化Matlab实现(非histeq内置函数) 直方图均衡化常用于图像增强,可以提高图像对比度,扩展图像动态范围. 算法步骤: 统计直方图 累计直方图 映射 close all clear a ...

  7. 彩色图直方图均衡化matlab

    直方图均衡化 简介 直方图是图像中像素强度分布的图形表达方式.它统计了每一个强度值所具有的像素个数.直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法.是图像处理领域中利用图像直方图对对 ...

  8. 数字图像处理 直方图均衡化 MATLAB实验

    一.原理 直方图均衡化是通过对原图像进行某种变换使原图像的灰度直方图修正为均匀的直方图的一种方法. 二.步骤 ①读入原图像huafen.jpg,并显示图像及其直方图: ②对图像进行直方图均衡化处理,并 ...

  9. Logistic回归——二分类 —— matlab

    目录 1.简介 2.应用范围 3.分类 3.应用条件 4.原理详解 4.1 sigmod分类函数 4.2 建立目标函数 4.3 求解相关参数 5.实列分析 5.1 读取数据(excel文件) 5.2 ...

最新文章

  1. c++引用matlab类,matlab调用C++函数浅谈(一)
  2. iOS内存优化及排查方法
  3. php 高级特性,PHP对象、模式与实践之高级特性分析
  4. RavenDb学习(十)附件,存储大对象
  5. C#编写串口通信程序(转)
  6. Python深入类和对象
  7. Javassist实现JDK动态代理
  8. Struts2 s:iterator 用法
  9. 批量复制文件并改成有顺序的文件名
  10. 2021-02-13
  11. Java防御目录穿越漏洞方法_WinRAR目录穿越漏洞复现及防御
  12. 【网络-实验】rip最大有效跳数15
  13. C语言实现二路归并排序
  14. netbean 快捷键
  15. mac下 eclipse支持magic mouse/Trackpad 操作
  16. IT从业者创业公司生存指南:创业后记 ---- 百感交集的过来人
  17. 无法解析类型java.lang.Object。从必需的.class文件间接引用了它
  18. Windows L2TP设置 2022-06-01
  19. 银行业务模拟系统(C/C++实现内含详细注释)
  20. 银屑病与大肠相关机制(调研手稿五)

热门文章

  1. 如何用计算机手机充电,电脑关机了还怎么给手机充电
  2. 常用指标MAE/MAPE/RMSE
  3. 网络工程师辞职及成功转型的故事!!
  4. Windows 各个版本 TortoiseSVN 下载
  5. 在服务端实现下载的各种方式
  6. 思科模拟器如何给端口启用根保护
  7. plc和单片机及c语言区别,plc和单片机的区别总结
  8. 数据分享_SoilGrids世界土壤信息数据
  9. C语言,C++ “xxxx” is ambiguous 的可能错因
  10. [我与云表的故事]云表业务公式中的数据源的理解