Halcon实例:提取图像的纹理特征

news/2024/7/21 7:11:15 标签: 计算机视觉, 人工智能, 图像处理

Halcon实例:提取图像的纹理特征

举例说明,输入的是一幅灰度图像,分别选取其中两个矩形区域的灰度图像,分析其灰度变化。首先选取灰度变化较为明显的矩形1,然后选取灰度变化比较平滑的矩形2,生成灰度共生矩阵,观察二者的参数。
在这里插入图片描述
图(a)为输入图像,红色和黄色的矩形表示分别选择了两块灰度不同的区域;图(b)为红色矩形图像的特征参数;图(c)为黄色矩形图像的特征参数。其具体值如表所示。
在这里插入图片描述
由图和表可见,左边的红色矩形灰度变化明显;能量值比较小,表示纹理的均匀性比较低,变化比较大;对比度比较高,说明灰度的变化比较大,边界比较明显。而右边黄色矩形内的图像的纹理变化不大,灰度相关性高,表示纹理在行或者列方向都非常相似;对比度低,表现了图像的局部灰度变化不明显。实现该过程的代码如下:

dev_close_window ()
*读取输入的图片
read_image (Image, 'data/board')
*将输入的彩色图像转为黑白图像
rgb1_to_gray (Image, GrayImage)
get_image_size (GrayImage, Width, Height)
*创建一个与输入图像同样大小的窗口
dev_open_window (0, 0, Width/4, Height/4, 'black', WindowID)
*设定画笔宽度
dev_set_line_width (5)
*创建两个窗口用于显示参数计算的结果
dev_open_window (0, 512, 320, 320, 'black', WindowID1)
dev_open_window (512, 512, 320, 320, 'black', WindowID2)
*分别设置两个矩阵,选择不同的两部分区域
gen_rectangle1 (Rectangle1, 200,10, 380, 190)
gen_rectangle1 (Rectangle2, 580, 650, 730, 800)
*分别对两个矩形求取灰度共生矩阵Matrix1和Matrix2
gen_cooc_matrix (Rectangle1, GrayImage, Matrix1, 6, 0)
gen_cooc_matrix (Rectangle2, GrayImage, Matrix2, 6, 0)
*分别对Matrix1和Matrix2提取灰度特征参数
cooc_feature_matrix (Matrix1, Energy1, Correlation1, Homogeneity1, Contrast1)
cooc_feature_matrix (Matrix2, Energy2, Correlation2, Homogeneity2, Contrast2)
*采取另一种方式,直接对矩阵2的图像求灰度特征参数,结果与上面两步计算出的参数是一致的
cooc_feature_image (Rectangle2, GrayImage, 6, 0, Energy3, Correlation3, Homogeneity3, Contrast3)
*显示图像窗口和两个矩形的灰度共生矩阵
dev_set_window (WindowID)
dev_set_draw ('margin')
dev_display (GrayImage)
dev_display (Rectangle1)
dev_set_color('yellow')
dev_display (Rectangle2)
dev_set_window (WindowID1)
dev_display (Matrix1)
*以字符串的形式,分别在两个矩阵的对应窗口上显示灰度特征值的计算结果
String := ['Energy: ','Correlation: ','Homogeneity: ','Contrast: ']
dev_set_color('red')
disp_message (WindowID1, String$'-14s' + [Energy1,Correlation1,Homogeneity1,Contrast1]$'6.3f', 'window', 12, 12, 'white', 'false')
dev_set_window (WindowID2)
dev_display (Matrix2)
dev_set_color('yellow')
String := ['Energy: ','Correlation: ','Homogeneity: ','Contrast: ']
disp_message (WindowID2, String$'-14s' + [Energy2,Correlation2,Homogeneity2,Contrast2]$'6.3f', 'window', 12, 12, 'white', 'false')

上述代码使用gen_cooc_matrix算子和coocfeature_matrix算子计算指定区域的灰度共生矩阵,并分别在两个矩阵的对应窗口中显示灰度特征值的计算结果。通过计算图像的纹理特征,可进一步进行模式匹配。


http://www.niftyadmin.cn/n/5318340.html

相关文章

万能字符单词拼写 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 有一个字符串数组 words 和一个字符串 chars。假如可以用 chars 中的字母拼写出 words 中的某个"单词"(字符串),那么我们就认为你掌握了这个单词。 words 的字符仅由 a-z 英文小写宁母组成,…

嵌入式c语言学习笔记:可重入函数与不可重入函数

什么是可重入函数与不可重入函数? 在一个多任务环境中,一个函数如果可以被多次重复调用,或者被多个任务并发调用,函数在运行过程中可以随时随地被打断,并不影响该函数的运行结果,我们称这样的函数为可重入…

你了解计算机网络的发展历史吗?

1.什么是计算机网络 计算机网络是指将一群具有独立功能的计算机通过通信设备以及传输媒体被互联起来的,在通信软件的支持下,实现计算机间资源共享、信息交换或协同工作的系统。计算机网络是计算机技术与通信技术紧密结合的产物,两者的迅速发展…

Javaweb之SpringBootWeb案例开发规范的详细解析

1.2 开发规范 了解完需求也完成了环境搭建了,我们下面开始学习开发的一些规范。 开发规范我们主要从以下几方面介绍: 1、开发规范-REST 我们的案例是基于当前最为主流的前后端分离模式进行开发。 在前后端分离的开发模式中,前后端开发人员…

C++入门【28-C++ 把引用作为参数】

我们已经讨论了如何使用指针来实现引用调用函数。下面的实例使用了引用来实现引用调用函数。 实例 #include <iostream>using namespace std;// 函数声明void swap(int& x, int& y);int main () {// 局部变量声明int a 100;int b 200;cout << "交…

2024.1.10力扣每日一题——删除子串后的字符串最小长度

2024.1.10 题目来源我的题解方法一 递归方法二 循环 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2696 我的题解 方法一 递归 每次将s中的“AB”和“CD”替换为空串&#xff0c;然后递归&#xff0c;直到s中不含两个字符串中的任意一个。 可以使用栈来替代递归。 时间…

CentOS7中将MySQL注册为系统服务开机启动

实际生产环境中为了避免重启服务器后所有的服务都手动启动带来的麻烦&#xff0c;建议所有基础服务都设置为开机自动启动。本章节我们主要演示在Centos7中如何将MySQL注册为系统服务&#xff0c;并实现开机自动启动。 ① 手动启动mysql&#xff0c;查看进程信息&#xff0c;复制…

HTML+JS+CSS移动端购物车选购界面

代码打包资源下载&#xff1a;【免费】HTMLJSCSS移动端购物车选购界面资源-CSDN文库 关键部分说明&#xff1a; UIGoods 类&#xff1a; 构造函数&#xff1a; 创建 UIGoods 实例时&#xff0c;传入商品数据 g&#xff0c;初始化商品的数据和选择数量。getTotalPrice() 方法…