IDL代码实现三种滤波方法(均值滤波 中值滤波 高斯滤波)对椒盐噪声的响应及对比分析


1 添加椒盐噪声


原始图像文件:


Lena图

过程文件:

Pro add_saltpepper
;read image
filename=dialog_pickfile(title='Please Choose the Image:')
img=read_image(filename)
;add 13% salt and pepper noise
img_noise=saltpepper(img,0.12)

;get the size of image
sz=size(img)
;get the image's numbers of columns and rows
sum_columns=sz[1] & sum_rows=sz[2]
;creat a window which can contain 2 images and some text
win1=window(dimension=[sum_columns*2+10,sum_rows+50])
;set the attributes of first image,containing position and so on
img1=image(img,position=[0,50,sum_columns-1,sum_rows+50-1],/device,/current)
;set the attributes of second image,containing position and so on
img2=image(img_noise,position=[sum_columns+10,50,sum_columns*2+10-1,sum_rows+50-1],/device,/current)
;set the title of first image
text1=text(sum_columns/2,20,'Lena Original Image',target=win1,alignment=0.5,/device)
;set the title of second image
text2=text(sum_columns*1.5+20,20,'Image Containing 12% Salt & Pepper Noise',target=win1,alignment=0.5,/device)
result=dialog_write_image(img_noise,filename=Lena_noise,type='jpeg',/fix_type,path='V:\Images',title='Save Image File:')

End

函数文件:

Function saltpepper,img,rate
;create a random array which is the same number as the image
num_array=n_elements(img)
random_array=randomu(sends,num_array)
;sort the random array
sort_array=sort(random_array)
;make the value of pepper noise be 0 and the value of salt noise be 255,each half
result=img
result[sort_array[0:num_array*rate/2-1]]=0
result[sort_array[num_array*rate/2:num_array*rate-1]]=255
return,result

End
图1 保存添加12%的Lena图像
图2 Lena原图像与添加12%椒盐噪声图像对比

2 图像去噪


(1)均值滤波

Pro img_smooth
;read image
;filename1=dialog_pickfile(title='Please Choose the Original Image:')
filename2=dialog_pickfile(title='Please Choose the Noise Image:')
;img=read_image(filename1)
img_noise=read_image(filename2)

;get the size of image
sz=size(img_noise)
;get the image's numbers of columns and rows
sum_columns=sz[1] & sum_rows=sz[2]
;mean smoothed of 5*5 window
img_smooth_5=smooth(img_noise,5)
;creat a window which can contain 3 images and some text
win1=window(dimension=[sum_columns*2+10,sum_rows+50])

;set the attributes of first image,containing position and so on
;img1=image(img,position=[0,50,sum_columns-1,sum_rows+50-1],/device,/current)
;set the attributes of second image,containing position and so on
img2=image(img_noise,position=[0,50,sum_columns-1,sum_rows+50-1],/device,/current)
;set the attributes of third image,containing position and so on
img3=image(img_smooth_5,position=[sum_columns+10,50,sum_columns*2+10-1,sum_rows+50-1],/device,/current)

;set the title of first image
;text1=text(sum_columns/2,20,'Lena Original Image',target=win1,alignment=0.5,/device)
;set the title of second image
text2=text(sum_columns*0.5,20,'Image Containing 12% Salt & Pepper Noise',target=win1,alignment=0.5,/device)
;set the title of first image
text1=text(sum_columns*1.5+10,20,'Lena Image After Smooth',target=win1,alignment=0.5,/device)
;save the smooth image
result=dialog_write_image(img_smooth_5,filename=Lena_smooth,type='jpeg',/fix_type,path='V:\Images',title='Save Image File:')
End

代码:

;mean smoothed of 5*5 window
img_smooth_5=smooth(img_noise,5)

中可以修改滤波窗口大小,可以看出,窗口越大,去噪效果越好,但图像越模糊。

3x3窗口:

图3 12%椒盐噪声图像与3x3窗口均值滤波图像对比

5x5窗口:

图4 12%椒盐噪声图像与5x5窗口均值滤波图像对比

9x9窗口:

图5 12%椒盐噪声图像与9x9窗口均值滤波图像对比


(2)中值滤波

Pro img_median
  ;read image
  ;filename1=dialog_pickfile(title='Please Choose the Original Image:')
  filename2=dialog_pickfile(title='Please Choose the Noise Image:')
  ;img=read_image(filename1)
  img_noise=read_image(filename2)

  ;get the size of image
  sz=size(img_noise)
  ;get the image's numbers of columns and rows
  sum_columns=sz[1] & sum_rows=sz[2]
  ;mean medianed of 5*5 window
  img_median_5=median(img_noise,5)
  ;creat a window which can contain 3 images and some text
  win1=window(dimension=[sum_columns*2+10,sum_rows+50])

  ;set the attributes of first image,containing position and so on
  ;img1=image(img,position=[0,50,sum_columns-1,sum_rows+50-1],/device,/current)
  ;set the attributes of second image,containing position and so on
  img2=image(img_noise,position=[0,50,sum_columns-1,sum_rows+50-1],/device,/current)
  ;set the attributes of third image,containing position and so on
  img3=image(img_median_5,position=[sum_columns+10,50,sum_columns*2+10-1,sum_rows+50-1],/device,/current)

  ;set the title of first image
  ;text1=text(sum_columns/2,20,'Lena Original Image',target=win1,alignment=0.5,/device)
  ;set the title of second image
  text2=text(sum_columns*0.5,20,'Image Containing 12% Salt & Pepper Noise',target=win1,alignment=0.5,/device)
  ;set the title of first image
  text1=text(sum_columns*1.5+10,20,'Lena Image After Median',target=win1,alignment=0.5,/device)
  ;save the median image
  result=dialog_write_image(img_median_5,filename=Lena_median,type='jpeg',/fix_type,path='V:\Images',title='Save Image File:')
End

代码:

;mean medianed of 5*5 window
img_median_5=median(img_noise,5)

中可以修改滤波窗口大小,可以看出,窗口越大,去噪效果越好,但图像越模糊。

3x3窗口:

图6 12%椒盐噪声图像与3x3窗口中值滤波图像对比

5x5窗口:

图7 12%椒盐噪声图像与5x5窗口中值滤波图像对比

9x9窗口:

图8 12%椒盐噪声图像与9x9窗口中值滤波图像对比


(3)高斯滤波

利用卷积运算自定义高斯卷积核进行图像滤波去噪:

Pro img_convol_gauss
  ;read image
  ;filename1=dialog_pickfile(title='Please Choose the Original Image:')
  filename2=dialog_pickfile(title='Please Choose the Noise Image:')
  ;img=read_image(filename1)
  img_noise=read_image(filename2)

  ;get the size of image
  sz=size(img_noise)
  ;get the image's numbers of columns and rows
  sum_columns=sz[1] & sum_rows=sz[2]
  ;define the kernel of convol
  kernel=[[1,4,7,4,1],[4,16,26,16,4],[7,26,41,26,7],[4,16,26,16,4],[1,4,7,4,1]]/273.0
  ;mean smoothed of 5*5 window
  img_convol=convol(float(img_noise),kernel,/edge_truncate)
  ;creat a window which can contain 3 images and some text
  win1=window(dimension=[sum_columns*2+10,sum_rows+50])

  ;set the attributes of first image,containing position and so on
  ;img1=image(img,position=[0,50,sum_columns-1,sum_rows+50-1],/device,/current)
  ;set the attributes of second image,containing position and so on
  img2=image(img_noise,position=[0,50,sum_columns-1,sum_rows+50-1],/device,/current)
  ;set the attributes of third image,containing position and so on
  img3=image(img_convol,position=[sum_columns+10,50,sum_columns*2+10-1,sum_rows+50-1],/device,/current)

  ;set the title of first image
  ;text1=text(sum_columns/2,20,'Lena Original Image',target=win1,alignment=0.5,/device)
  ;set the title of second image
  text2=text(sum_columns*0.5,20,'Image Containing 12% Salt & Pepper Noise',target=win1,alignment=0.5,/device)
  ;set the title of first image
  text1=text(sum_columns*1.5+10,20,'Lena Image After Gauss',target=win1,alignment=0.5,/device)
  ;save the gauss image
  result=dialog_write_image(img_convol,filename=Lena_gauss,type='jpeg',/fix_type,path='V:\Images',title='Save Image File:')
End

利用卷积运算自定义高斯卷积核进行图像滤波去噪,卷积核为:

;define the kernel of convol
kernel=[[1,4,7,4,1],[4,16,26,16,4],[7,26,41,26,7],[4,16,26,16,4],[1,4,7,4,1]]/273.0
图9 12%椒盐噪声图像与高斯滤波图像对比

结论

综上,可以看出,三种滤波方法(均值滤波,中值滤波,高斯滤波)对椒盐噪声的响应各有不同,其中中值滤波最适合去除椒盐噪声,而且效果最好。这取决于其卷积核特性,对每个窗口的像素值取其中间值,可以直接利用窗口内的正常像素替换椒盐噪声这种突变式影响,更有利于填补这些缺口,优化图像。此图中5*5窗口效果良好,既有更好的去噪效果,且不易模糊图像。

CSDN 分享

简单书写,

希望你十分美好!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343