IDL实现边缘检测

Author:HanDi
上海某高校遥感专业 工科男
相信积微者速成,相信分享的力量
CSDN@这可真是难为我了

很早之前自己无聊时编的一个小程序,使用Reborts算子进行边缘检测。
Roberts算子的模板分为水平方向和垂直方向,如下式所示,从其模板可以看出,Roberts算子能较好的增强正负45度的图像边缘。
d x = [ 0 1 − 1 0 ] d y = [ 1 0 0 − 1 ] d_{x}=\left[\begin{array}{cc} 0 & 1 \\ -1 & 0 \end{array}\right] \quad d_{y}=\left[\begin{array}{cc} 1 & 0 \\ 0 & -1 \end{array}\right] dx=[0110]dy=[1001]
这里也可以根据理解自行更改卷积核使用 Prewitt 算子,Sobel 算子,拉普拉斯算子。
注意原始图像文件要求jpg格式。如果想要处理其他格式图像,将read_jpeg改为其他格式图像读取函数

新手写技术博客没有什么经验,如有不足,还请大家多多包涵,欢迎大家私信交流 ^ _ ^ !!!一起进步~
以后会分享一些地理数据处理和数据挖掘的示例

下面是完整代码,我的IDL版本是 IDL8.5

PRO self_reborts
cd,'D:\'
  fn = DIALOG_PICKFILE(title = '选择原始图片')
  ;图像读取函数可视情况更换
  READ_JPEG, fn, data
  img_size=SIZE(data)

  data_new=fltarr(img_size[2],img_size[3])
;边缘检测算子卷积核也可自行更换
  arr1=[[ 1, 0],$
    [ 0,-1]]
  arr2=[[ 0, 1],$
    [-1, 0]]

  FOR i=0,img_size[2]-2 DO BEGIN
    FOR j=0,img_size[3]-2 DO BEGIN
      data_new[i,j]=ABS(TOTAL(arr1*data[0,i:i+1,j:j+1]))$
        +ABS(TOTAL(arr2*data[0,i:i+1,j:j+1]))
    ENDFOR
  ENDFOR

  window,1,title='Self_reborts',xsize=img_size[2],ysize=img_size[3]
  TVSCL, data_new
  data_new1 = make_array(size = img_size)
  for s = 0,img_size[0]-1 do begin
    data_new1[s,*,*] = data_new[*,*]
  endfor
  o_fn =DIALOG_PICKFILE(title = '选择输出路径和文件名')
  write_image,o_fn+'.jpg','jpeg',data_new1
END

tip

快捷键:Ctrl + Shift+ F
可以根据格式器的设置自动调整编码大小写同时自动对齐

代码运行效果

原始图像

运行结果
边缘图像

链接:https://pan.baidu.com/s/1AJtxxRDNLvM0Lr5nvB7fIA
提取码:c3rc
边缘图像喜欢自取

效果还是很酷的!可以自制一波壁纸~

如有错误,欢迎评论,私信,会及时改正

————————————————
版权声明:本文为CSDN博主「这可真是难为我了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42183989/article/details/121182493

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值