halcon图像处理基本运算
图像处理最基本的操作包括颜色空间转换,各种代数运算,放射变换等。通过熟悉这些常见的操作,可以对图像有基本的认识,尤其是对刚开始接触视觉图像处理的人而言,熟悉这些操作,可以快速对图像有一个了解。比如能够明白RGB模型,HSI模型、HSV模型等这些颜色空间模型。能够对灰度图、彩色图有一定的认识,同时也能理解图像的位数、通道等概念。通过代数运算,能够明白图像处理其实就是对一堆二维矩阵数字进行运算。代数运算可以了解图像的数据类型,有的图像是用byte类型表示的像素值,有的使用int表示,有的是用real表示,对于某些操作,有一定的数据类型的限制。放射变换可以了解图像的平移、旋转等概念。
RGB一般是24位彩色图像,颜色数量共有224种。RGB图像由红、绿、蓝三个通道组成,每个通道的图像是一个二维数字矩阵,每个数字用8位来存储,一个像素占24位,所以是24位图像。灰度图是RGB三个分量中的值相等,即R=G=B。这三个值相等的时候,显示出来的图像就只有亮度信息,看起来就像是黑白图像。由于RGB三个通道的值相等,因此,灰度图只需要存储一个通道的数字,所以只需要用8位来存储一个像素的值,所以我们一般称为8位灰度图。RGB图像可以转换成灰度图像,有多种转换方式,常见的是对每个RGB分量设定一定的权重,然后三个分量求和得到灰度值。有时候也可以分别提取RGB的每个分量来进行图像处理,每个分量单独显示的时候,看起来也是灰度图,只是三个分量分别凸显的原RGB图像的特征有一些不同,如果进行图像处理,就要看下哪个分量能够更加凸显图像的特征,这是就取哪个分量来进行图像处理。同样的方式适用于HSI或HSV颜色模型。HSI或HSV也表示的图像三个分量,只是这个分量分别表示的图像的色调(hue)、色饱和度(saturation)和强度(intensity)或明亮值(value)。HSI和HSV只是I和V不一样,I=(R+G+B) / 3,是RGB三个分量的平均值,V = max(max(R,G),B)是RGB三个分量的最大值。由于I和V的不同,也使得S的值有所不同。
图1 RGB颜色模型
图2 HSI颜色模型
图像代数运算主要是指图像的加减乘除、对数、三角函数、指数、幂运算等,通过这些操作,熟悉图像处理实际上是对数字矩阵的处理。当然,这些运算在实际的图像处理时也是有用的,这需要根据图像来判断到底用什么方法。通过图像代数运算,也可以了解图像的数据类型,有的运算需要int数据,有的运算需要real数据,有的运算所有数据类型都可以运算。
放射变换是指图像的平移、旋转等变换。通过放射变换,可以了解图像变换的原理,实际上就是一个变换矩阵,通过变换矩阵实现坐标位置的改变。其中尤其是旋转变换比较重要,因此,在实际的图像处理中,由于各种原因,需要检测的图像的特征部分不一定是水平或垂直放置的,这时候就需要通过一定的旋转变换,将特征旋转到水平位置或垂直位置。
下面通过一个具体的例子,来看下在halcon里面怎么实现上面的操作。所用到的图像就以halcon自带的一张图像为例。
图3 待处理的原图
图4 所有处理的结果图像
*读取一张彩色图像
read_image (Image,'blister/blister_reference')
*得到图像通道数
count_channels(Image,Channels)
*彩色图像转灰度图
rgb1_to_gray(Image, GrayImage)
*彩色图像分离为三个通道图像
decompose3(Image,R,G,B)
*RGB转HSV和HSI
trans_from_rgb(R,G,B,H1,S1,V1,'hsv')
trans_from_rgb(R,G,B,H2,S2,I2,'hsi')
*HSV和HIS转RGB
trans_to_rgb(H1,S1,V1,ImageRed, ImageGreen,ImageBlue, 'hsv')
trans_to_rgb(H2,S2,I2,ImageRed1,ImageGreen1, ImageBlue1, 'hsi')
*将转换后的单通道RGB合并成RGB彩色图
compose3(ImageRed,ImageGreen,ImageBlue,ImageRGB)
*图像均值模糊
mean_image(GrayImage,ImageMean, 9, 9)
*图像相加,相减,相减的绝对值,线性拉伸,图像相乘除
add_image(GrayImage, ImageMean,ImageResult, 0.5, 0)
sub_image(GrayImage,ImageMean,ImageSub, 1,128)
abs_diff_image(GrayImage,ImageMean,ImageAbsDiff,1)
scale_image(ImageAbsDiff, ImageScaled, 5,20)
mult_image(GrayImage,ImageMean,ImageResult1,0.005, 0)
div_image(GrayImage,ImageMean,ImageResult2,255, 0)
*指数、gamma变换、图像反转、对数、幂、开方
exp_image(GrayImage,ExpImage, 'e')
gamma_image(GrayImage,GammaImage,0.416667,0.055, 0.0031308, 255, 'true')
invert_image(GrayImage,ImageInvert)
log_image(GrayImage,LogImage, 'e')
pow_image(GrayImage,PowImage, 2)
sqrt_image(GrayImage,SqrtImage)
pow_image(SqrtImage, PowImage1, 3)
*图像数据格式转换
convert_image_type(GrayImage,ImageConverted,'real')
*三角函数运算
sin_image(ImageConverted, SinImage)
cos_image(ImageConverted,CosImage)
tan_image(ImageConverted,TanImage)
asin_image(SinImage,ArcsinImage)
acos_image(CosImage,ArccosImage)
atan_image(TanImage,ArctanImage)
*取两幅图像的最大值或最小值
max_image(GrayImage,ImageMean,ImageMax)
min_image(GrayImage,ImageMean,ImageMin)
*创建一个单位变换矩阵,每次根据创建的平移或、旋转或缩放矩阵对图像进行平移、旋转、缩放操作
hom_mat2d_identity(HomMat2DIdentity)
*创建平移矩阵
hom_mat2d_translate(HomMat2DIdentity,20,50,HomMat2DTranslate)
*图像平移
affine_trans_image(GrayImage,ImageAffineTrans,HomMat2DTranslate, 'constant', 'false')
get_image_size(GrayImage,Width, Height)
*创建旋转矩阵
hom_mat2d_rotate(HomMat2DIdentity,rad(45),Width/2,Height/2, HomMat2DRotate)
*图像旋转
affine_trans_image(GrayImage,ImageAffineTrans1,HomMat2DRotate, 'constant', 'false')
*创建缩放矩阵
hom_mat2d_scale(HomMat2DIdentity, 2, 1.5,Width/2, Height/2, HomMat2DScale)
*图像缩放
affine_trans_image(GrayImage,ImageAffineTrans2,HomMat2DScale, 'constant', 'false')
*根据图像得到的region,通过计算中心和方向,利用vector_angle_to_rigid得到变换矩阵,然后进行图像放射变换
threshold(GrayImage,Region, 128, 255)
shape_trans(Region, RegionTrans, 'convex')
orientation_region(RegionTrans, Phi)
area_center(RegionTrans, Area, Row, Column)
vector_angle_to_rigid(Row, Column, Phi,Row, Column, 0, HomMat2D)
affine_trans_image(GrayImage,ImageAffineTrans3,HomMat2D, 'constant', 'false')
打赏
weixin_39975261
你的鼓励将是我创作的最大动力
您的余额不足,请先充值哦~去充值
一键三连
点赞Mark关注该博主, 随时了解TA的最新博文对于每帧图像来说,均值分为两种:image mean 和 pixel mean。
image mean:
简单的说,读入一张彩色图像,假设是(NN3),这时候,求出image mean的话,就也是NN3,相当于把所有训练集在同一个空间位置上的像素的对应通道求了均值,也就是caffe里生成的mean.binaryproto文件,
pixel mean:
而pixe…
halcon源码
read_image (Lena, ‘C:/Users/Administrator/Desktop/lena.bmp’)
rgb1_to_gray (Lena, GrayImage)
get_image_size (GrayImage, Width, Height)
*图像取反
invert_image (GrayImage, ImageInvert)
*增加对比度
emphasize (GrayImage, ImageEm
…
1.2对
halcon:底层功能算法多,运算性能快,开发需要一定软件功底和图像处理理论。
// 二维傅里叶+低通滤波
struct stPGMImage* DFT2(struct stPGMImage* image, double D0 = 5.0);
2、函数实现
inline int Padding(int n)
{
double lg = log10((double)n) / log10(2.0);
if ((lg - (int)lg) == 0)
{
return n;
}
int N = pow(2.0, ((int)lg + 1));
re
halcon只能在单独行进行注释,不能在语句后面进行注释。
1、tuple
赋值符号“:=”
tuple算子:
(1)变量定义与加减乘除运算
代码如下:
**hal-con中的几种变量
*1.tuple
a:=1
b:=[2,3]
*将a和b合并起来
c:=[a,b]
*求c中有多少个元素
num:=|c|
*
灰度变换(scale_image)
原理:可以理解为用一个模板扫描图像中的每一个像素,模板中像素最大值和最小值的差作为模板中心像素点的值。
作用:拉开图像的对比度,让图像中黑的地方更黑,亮的地方更亮。
emphasize:增强图像的高频区域(边缘和拐角),使图像看起来更清晰。
直方图均衡化(equ_histo_image)
灰度…