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=[0−110]dy=[100−1]
这里也可以根据理解自行更改卷积核使用 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://i-blog.csdnimg.cn/blog_migrate/d6d76b744a1e59ce93989e7290a67091.jpeg#pic_center)
原始图像
边缘图像
链接:https://pan.baidu.com/s/1AJtxxRDNLvM0Lr5nvB7fIA
提取码:c3rc
边缘图像喜欢自取
效果还是很酷的!可以自制一波壁纸~
如有错误,欢迎评论,私信,会及时改正
————————————————
版权声明:本文为CSDN博主「这可真是难为我了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42183989/article/details/121182493