彩色圖像和灰階圖像:彩色圖像具備更多資訊,可以進行目标區域分析等
圖像的顔色
- RGB顔色
- 灰階圖像
- HSV:色調Hue、飽和度Saturation、純度Value
- HSI: 色調Hue、飽和度Saturation、亮度Intensity
Bayer
使用單晶片和一個Bayer濾色片過濾光線得到不同通道資訊,輸出的圖像就叫做Bayer圖像,每個像素隻有一個顔色分量的圖像
圖像通道
RGB+灰階圖表示像素的透明度
- 通路通道:access_channel()
- 通道數量查詢:count_channels()
- 通道合并:compose3() 逆操作 channels_to_image():數組通道合成圖像
- 通道分離:decompose3() decompose4() image_to_channels():分解包含多個單個通道的圖像數組(Array)
read_image(Image,'fpc')
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_display(Image)
*擷取圖像通道數量
count_channels(Image, Channels)
*通路某一指定的通道
access_channel(Image, Image4, 2)
*分離RGB圖像為3個通道
decompose3(Image, Image1, Image2, Image3)
*把三通道圖像合成RGB圖像
compose3(Image1, Image2, Image3, MultiChannelImage)
*将數組内多張單通道圖像合成一幅多通道圖像
read_image(Images,['fpc','fpc','fpc'])
channels_to_image(Images, MultiChannelImage1)
count_channels(Images,channels)
處理RGB圖像
對圖像各通道進行相加、減、乘、除操作。
read_image(Image, 'zhuzi')
decompose3(Image, Image1, Image2, Image3)
dev_display(Image3)
sub_image(Image1, Image2, ImageSub, 1, 128)
add_image(Image1, Image2, Imageadd, 0.5, 0)
div_image(Image1, Image2, Imagediv, 255, 0)
mult_image(Image1, Image2, Imagemult, 0.005, 0)
sub_image(ImageSub, Imagemult, ImageSub1, 1, 128)
threshold(ImageSub1, Region, 240, 255)
dev_clear_window()
dev_display(Region)
*腐蝕
erosion_circle(Region, RegionErosion, 1.5)
dev_clear_window()
dev_display(RegionErosion)
通過通道操作,把紅色 紫色的珠子區域提取了出來
利用顔色資訊提取背景相似的字元區域
read_image(Image, 'M105')
rgb1_to_gray(Image, GrayImage)
*灰階對比度不大
decompose3(Image, Image1, Image2, Image3)
*B對比度較大
*rgb轉化為HSV,色調 飽和度,明度
trans_from_rgb(Image1, Image2, Image3, ImageResult1, ImageResult2, ImageResult3, 'hsv')
add_image(ImageResult2, ImageResult3, ImageResult, 0.5, 0)
*HSV對比度也不大
*選擇B通道
rgb1_to_gray(Image2, GrayImage1)
threshold(GrayImage1, Region1,60, 89)
*區域分割
reduce_domain(GrayImage1, Region1, ImageReduced)
erosion_circle(Region1, RegionErosion, 3.5)
*膨脹操作
dilation_circle(RegionErosion, RegionDilation, 3.5)
*開運算
opening_circle(RegionDilation, RegionOpening, 3.5)
dev_clear_window()
dev_display(RegionOpening)
紋理分析
對于很難用顔色區分析處理的圖像,不妨用紋理分析,紋理是圖像表面的灰階變化,規則局部的重複部分為紋理單元。
紋理濾波器:texture_laws(),該算子提供7種紋理濾波器的集合:level、edge、spot、wave、ripple、undulation、oscillation。水準、邊緣、斑點、波浪、波紋、波動、振蕩
第三個參數是上述組合,如ls,代表行方向濾波器類型為level,列方向上采用spot,
ls類型适合檢測垂直方向上的缺陷
*讀取布料圖像
read_image(Image, 'zhehen')
*将圖像分解為R G B三通道圖像
decompose3(Image, Image1, Image2, Image3)
*将RGB轉換為HSV顔色空間
trans_from_rgb(Image1, Image1, Image1, ImageResult1, ImageResult2, ImageResult3, 'hsv')
*進行紋理分析
*選擇濾波器類型ls
*ls适合分析垂直上的缺陷
texture_laws(ImageResult3, ImageTexture, 'ls', 2, 7)
*均值濾波
mean_image(ImageTexture, ImageMean, 9,9)
*門檻值分割
threshold(ImageMean, Region, 136, 255)
*分離區域
reduce_domain(ImageMean, Region, ImageReduced)
*開運算 先腐蝕後膨脹
opening_circle(ImageReduced, RegionOpening, 1)
dev_clear_window()
dev_display(RegionOpening)
*分割為獨立區域
connection(RegionOpening, ConnectedRegions)
*計算各區域面積,提取最大
area_center(ConnectedRegions, Area, Row, Column)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
*閉操作,提取有缺陷區域
closing_circle(SelectedRegions, RegionClosing, 11.5)
dev_clear_window()
dev_display(SelectedRegions)
檢測紙折痕
原木計數
*關閉目前視窗,清空螢幕
dev_close_window()
*讀取一張圖檔
read_image(Image,'mu.jpg')
*擷取圖像大小,以建立合适尺寸的視窗
get_image_size(Image,Width,Height)
dev_open_window(0,0,Width,Height,'black',WindowHandle)
*顯示讀取的圖像
dev_display(Image)
*将圖像轉換為單通道灰階圖像
rgb1_to_gray(Image,GrayImage)
*顯示灰階圖像
dev_display(GrayImage)
*使用門檻值提取較亮的部分
threshold(GrayImage,DarkArea,125,255)
*清空視窗并顯示亮的部分
dev_clear_window()
dev_display(DarkArea)
*腐蝕
erosion_circle(DarkArea, RegionErosion, 5.5)
*清空視窗并顯示亮的部分
dev_clear_window()
dev_display(RegionErosion)
dilation_circle(RegionErosion, RegionDilation, 3.5)
*将不相連的區域整體分割成獨立的區域
connection(RegionDilation,ConnectedRegions)
* 排除雜點,将面積較大的目标選擇出來
select_shape(ConnectedRegions,SelectedRegions,'area','and',150,99999)
*目标計數
count_obj(SelectedRegions,Number)
*即将顯示文字,将文字顔色設定為黑色
dev_set_color('white')
*确定文字顯示區域
set_tposition(WindowHandle,150,100)
*設定字型
set_font(WindowHandle,'-System-24-*-0-0-0-1-GB2312_CHARSET-')
*視窗輸出文字
write_string(WindowHandle,'有'+Number+'個木頭')
*end
根根根