大連h5網(wǎng)站開發(fā)東莞seo優(yōu)化推廣
例程功能
?演示如何使用edges_color
,展示只能從彩色圖像中提取某些邊緣的圖像,說明edges_color
和edges_image
輸出之間的差異。
代碼如下
dev_update_off ()
read_image (Image, 'olympic_stadium')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_set_part (0, 0, Height - 1, Width - 1)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_display (Image)
Message := 'Color image'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
stop ()
* Convert the color image to a gray value image. Note that there is no contrast
* between the soccer field and the track in the gray value image.
rgb1_to_gray (Image, GrayImage)
dev_display (GrayImage)
Message := 'Gray value image'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
stop ()
* Compute the color edges without non-maximum suppression and hysteresis
* thresholding, i.e., the raw edge amplitude image. Note that there is a clearly
* visible edge between the soccer field and the track in the color edge image.
edges_color (Image, ImaAmp, ImaDir, 'canny', 1, 'none', -1, -1)
dev_display (ImaAmp)
Message := 'Color edge image'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
stop ()
* Compute the gray value edges without non-maximum suppression and
* hysteresis thresholding, i.e., the raw edge amplitude image. Note that there is
* no visible edge between the soccer field and the track in the gray value edge
* image.
edges_image (GrayImage, ImaAmpGray, ImaDirGray, 'canny', 1, 'none', -1, -1)
dev_display (ImaAmpGray)
Message := 'Gray value edge image'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
stop ()
* Now perform the color edge extraction including non-maximum suppression
* and hysteresis thresholding. Note the segmented edge between the soccer
* field and the track.
edges_color (Image, ImaAmpHyst, ImaDirHyst, 'canny', 1, 'nms', 20, 40)
threshold (ImaAmpHyst, RegionColor, 1, 255)
skeleton (RegionColor, EdgesColor)
dev_display (Image)
dev_set_color ('blue')
dev_display (EdgesColor)
Message := 'Segmented color edges'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
stop ()
* Now perform the gray value edge extraction including non-maximum
* suppression and hysteresis thresholding. Note the absence of an edge
* between the soccer field and the track.
edges_image (GrayImage, ImaAmpGrayHyst, ImaDirGrayHyst, 'canny', 1, 'nms', 20, 40)
threshold (ImaAmpGrayHyst, RegionGray, 1, 255)
skeleton (RegionGray, EdgesGray)
dev_display (GrayImage)
dev_set_color ('blue')
dev_display (EdgesGray)
Message := 'Segmented gray value edges'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
stop ()
* Now display everything again, while only showing the part of the image
* containing the soccer field and the track.
Row1 := 220
Col1 := 215
Row2 := 399
Col2 := 489
dev_set_part (Row1, Col1, Row2, Col2)
dev_display (Image)
stop ()
dev_display (GrayImage)
stop ()
dev_display (ImaAmp)
stop ()
dev_display (ImaAmpGray)
stop ()
dev_display (Image)
dev_set_color ('blue')
dev_display (EdgesColor)
stop ()
dev_display (GrayImage)
dev_set_color ('blue')
dev_display (EdgesGray)
要點
- 例程中著重說明圖像中足球場和跑道兩個區(qū)域間幾乎沒有對比度。以此為難點分別用
edges_color
和edges_image
分割圖像邊緣。
沒有對比度意味著灰度化后足球場和跑道區(qū)域間邊緣特征不明顯(看起來像一塊區(qū)域),后接edges_image
確實沒有檢測出足球場邊框。
edges_color
直接對彩色圖像進行邊緣提取,效果會好于edges_image
方法。兩個算子的參數(shù)相同,不同點在于入?yún)D像分別為彩色圖像和灰度圖像。
edges_color
——使用 Deriche、Lanser、Shen 或 Canny 過濾器提取邊緣;
?Image
——入?yún)?#xff0c;待處理圖像;
?ImaAmp
——出參,邊緣幅度(梯度)分割結(jié)果;
?ImaDir
——出參,邊緣方向分割結(jié)果;
?Filter
——入?yún)?#xff0c;過濾器;
?Alpha
——入?yún)?#xff0c;濾鏡參數(shù)(值越小,平滑效果越強,細(xì)節(jié)越少,canny
算子相反);
?NMS
——入?yún)?#xff0c;極大值抑制;
?Low
——入?yún)?#xff0c;滯后閾值分割的低閾值(不需要則置negative
);
?High
——入?yún)?#xff0c;滯后閾值分割的高閾值(不需要則置negative
);