IDL(彩色)图像处理(2)
1.圖像濾波處理
均值平滑利用smooth函數
result=smooth(img,width,/edge_truncate)
img是數組,做圖像處理就用img代替了,width是卷積核的寬度,一般3或5。
/Edge_truncate關鍵字用于設置圖像邊緣是否進行擴展之后濾波。個人覺得設置上就行。
中值濾波用median()函數,與smooth函數用法基本相同。
result=median(img,width)
這兩個函數寫一個例子:
pro picture_process fn=dialog_pickfile(title='') if fn eq !null then return img=read_image(fn) img_smooth=smooth(img,[1,20,20]) ;這里的width用法特殊, 是在不同維度上設置卷積核,因為是rgb圖像,必須有多波段卷積核設置 result=image(img_smooth) end我和我舍友一個校草合照了一張:
舍友太帥了我頂不住。
下面將我和校草舍友的合照進行均值平滑:
大家模糊起來
2.銳化(邊緣提取,邊緣增強)
就列舉遙感導論上介紹的三種算子:Roberts,Sobel,Laplacian三個。
result=roberts(image)
result=sobel(image)
result=laplacian(image)
3.自己設置卷積核進行運算
result=convol(img,kernel,scale_factor,/normalize,/edge_truncate,/edge_zero)
img是輸入的圖像,kernel是自我設置的卷積核,scale_factor設置比例系數,就是用這個值乘以每一個像元值,若設置/normalize則此值失效。edge_truncate用法與均值平滑相同,依我看設置上就行。
例子:用我自己胡亂設置的卷積核對我和校草的圖像進行處理:
這里卷積核設置復雜的原因也是因為三維圖像要設置不同波段上的卷積核。這也是第二章節銳化里面無法對彩色圖像進行處理的原因。
大家變成了留學生,洋大人。
4.圖像裁剪
沒有啥函數(如果不用envi接口,用的話有的)
subraster=envisubsetraster(input_raster,sub_rect=[x1,y1,x2,y2]) ;調用envi接口進行空間裁剪
徐永明的書寫了,就是取一個空間子集:
img_clip=img[*,0:100,0:100]
下面對我和校草的圖片進行空間裁剪:
5.圖像重采樣
rebin()可以修改數組的大小,行列數必須是原來的整數倍!
變大時會插值,默認算法雙線性內插法,/sample關鍵字設置為最近鄰域。
congrid()將數組調整成同維數任意大小,一維和二維數組默認算法最近鄰域法,三維時采用雙線性內插法,關鍵字/interp為雙線性內插法,/cubic為三重卷積內插法。
在縮小數組的時候,如果使用rebin函數,則會進行插值處理,如果使用congrid函數則僅僅進行重采樣。
下面對我和校草的圖像進行重采樣:
變瘦,舍友高興非常。
6.圖像的轉置(可以用于波段變換)
result=transpose(img,[P])
img是輸入的圖像,[P]是設置的轉置方式,就是誰在前誰在后。可以用于轉換波段順序。
例如某影像有三個波段,bsq排列的:[3,600,600]
可以寫:result=transpose(data,[1,0,2])
這樣子就是把原本在中間的600排在第一,把3排在第二,把最后的600還是排在第二,變為:[600,3,600] 這樣子就變為BIL
總結
以上是生活随笔為你收集整理的IDL(彩色)图像处理(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot整合qq登录<1.前
- 下一篇: 做一个php 框架 书,开发自己的php