halcon 单通道图像转成3通道_halcon图像处理基本运算
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')
總結
以上是生活随笔為你收集整理的halcon 单通道图像转成3通道_halcon图像处理基本运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C | 扫雷游戏完整版
- 下一篇: 再看数据库——(2)视图