canny算法源码c语言,科学网—基于canny边缘检测算法的IDL源码示例 - 董彦卿的博文...

基于canny边缘检测算法的IDL源码示例

已有 8192 次阅读

2010-12-1 22:19

|个人分类:IDL技术|系统分类:科研笔记|

IDL, 边缘检测, canny

电脑中无意everything出这个pro来,简单修改完善了下共享出来。

e2199bc77c87b654559829450823b99f.png

PRO kill_canny_app, event

shmunmap, 'rose_shmmap'

END

PRO CannyApp_event, event

centered = 0

case widget_info(event.id, /uname) of

"HIGHv":  goto, FilterIt

"LOWv":     goto, FilterIt

"SIGMAv": goto, FilterIt

"BtnQuit":    goto, ExitFilterApp

endcase

FilterIt:

sliderH_ID = widget_info(event.top, find_by_uname = "HIGHv")

widget_control, sliderH_ID, get_value = HighValue ;

sliderL_ID = widget_info(event.top, find_by_uname = "LOWv")

widget_control, sliderL_ID, get_value = LowValue  ;

sliderS_ID = widget_info(event.top, find_by_uname = "SIGMAv")

widget_control, sliderS_ID, get_value = SigmaValue    ;

HighValue = HighValue * 0.01

LowValue = LowValue * 0.01

SigmaValue = SigmaValue * 0.01

wDraw2_ID = widget_info(event.top, find_by_uname = "RoseEdges")

widget_control, wDraw2_ID, get_value = ID_grWindow2

rose_image = shmvar('rose_shmmap')

;_____Plot the edges of the image:_____

wset, ID_grWindow2

rose_xsize = (size(rose_image, /dimensions))[1]

rose_ysize = (size(rose_image, /dimensions))[2]

red_rose = reform(rose_image[0, *, *], rose_xsize, rose_ysize)

green_rose = reform(rose_image[0, *, *], rose_xsize, rose_ysize)

blue_rose = reform(rose_image[0, *, *], rose_xsize, rose_ysize)

red_edge = CANNY(red_rose, HIGH = HighValue, LOW = LowValue, SIGMA = SigmaValue)

green_edge = CANNY(green_rose, HIGH = HighValue, LOW = LowValue, SIGMA = SigmaValue)

blue_edge = CANNY(blue_rose, HIGH = HighValue, LOW = LowValue, SIGMA = SigmaValue)

RGB_edge = bindgen(3, 227, 149)

RGB_edge[0, *, *] = red_edge * 255

RGB_edge[1, *, *] = green_edge * 255

RGB_edge[2, *, *] = blue_edge * 255

TV, RGB_edge[0,*,*],CHANNEL=1

TV, RGB_edge[1,*,*],CHANNEL=2

TV, RGB_edge[2,*,*],CHANNEL=3

goto, AllDone

ExitFilterApp:

shmunmap, 'rose_shmmap'

widget_control, event.top, /destroy

return

AllDone:

END

PRO CannyApp

COMPILE_OPT IDL2

;_____Create the unfiltered image:_____

rose_path = "C:Program FilesITTIDLIDL80examplesdatarose.jpg"

if file_test(rose_path) ne 1 then begin

tmp = dialog_message('file not exist'+String(13b)+$

rose_path,/error)

return

endif

rose_image = read_image(rose_path)

;______________________________________

;_____Set up shared memory (so event handler can have image):_____

shmmap, 'rose_shmmap', /BYTE, size(rose_image, /dimensions)

shm_var = shmvar('rose_shmmap')

shm_var[*] = rose_image

;_________________________________________________________________

;_____Create the edge-detected image:_____

rose_xsize = (size(rose_image, /dimensions))[1]

rose_ysize = (size(rose_image, /dimensions))[2]

red_rose = reform(rose_image[0, *, *], rose_xsize, rose_ysize)

green_rose = reform(rose_image[0, *, *], rose_xsize, rose_ysize)

blue_rose = reform(rose_image[0, *, *], rose_xsize, rose_ysize)

red_edge = CANNY(red_rose)

green_edge = CANNY(green_rose)

blue_edge = CANNY(blue_rose)

RGB_edge = bindgen(3, 227, 149)

RGB_edge[0, *, *] = red_edge * 255

RGB_edge[1, *, *] = green_edge * 255

RGB_edge[2, *, *] = blue_edge * 255

;____________________________________

;_____Build the widgets:_____

wTLB=WIDGET_BASE(/ROW)

wControls = widget_base(wTLB, /column)

wLeft = WIDGET_BASE(wTLB,/COLUMN)

wRight = WIDGET_BASE(wTLB,/COLUMN)

wBase1 = WIDGET_BASE(wLeft,/COLUMN)

wBase2 = WIDGET_BASE(wRight,/COLUMN)

wText1a = WIDGET_LABEL(wBase1,VALUE="Original Rose")

wDraw1 = WIDGET_DRAW(wBase1,XSIZE = rose_xsize, YSIZE = rose_ysize)

wText2 = WIDGET_LABEL(wBase2,VALUE="Rose's edges")

wDraw2 = WIDGET_DRAW(wBase2,XSIZE = rose_xsize, YSIZE = rose_ysize, uname = "RoseEdges")

;_____Controllers:_____

wSliderH = widget_slider(wBase1, title = "High Value (% of maximum pixel value):", maximum = 100, $

minimum = 0, value = 80, uname = "HIGHv")

wSliderL = widget_slider(wBase1, title = "Low Value (% of High Value):", maximum = 100, $

minimum = 0, value = 40, uname = "LOWv")

wSliderS = widget_slider(wBase1, title = "Sigma %", maximum = 100, $

minimum = 0, value = 60, uname = "SIGMAv")

wButtonQuit = widget_button(wBase1, value = "Quit Edge App", uname = "BtnQuit")

;____________________________

WIDGET_CONTROL,wTLB,/REALIZE

;____________________Draw the images:____________________

widget_control, wDraw1, GET_VALUE = window1ID

widget_control, wDraw2, GET_VALUE = window2ID

;_____Plot the original image:_____

wset, window1ID

reconstructed_rose = bindgen(227, 149, 3)

reconstructed_rose[*,*,0] = red_rose

reconstructed_rose[*,*,1] = green_rose

reconstructed_rose[*,*,2] = blue_rose

TV,rose_image[0,*,*],CHANNEL=1

TV,rose_image[1,*,*],CHANNEL=2

TV,rose_image[2,*,*],CHANNEL=3

;_____Plot the edges of the image:_____

wset, window2ID

TV, RGB_edge[0,*,*],CHANNEL=1

TV, RGB_edge[1,*,*],CHANNEL=2

TV, RGB_edge[2,*,*],CHANNEL=3

;________________________________________________________

XMANAGER,'CannyApp',wTLB, cleanup = "kill_canny_app"

END

;---

转载本文请联系原作者获取授权,同时请注明本文来自董彦卿科学网博客。

链接地址:http://blog.sciencenet.cn/blog-344887-389409.html

上一篇:ENVI for ArcGIS? Server

下一篇:grib气象数据IDL 读取

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值