2016年05月02日(月) |
| |
画像のノイズ処理1 | |
--(上級編)-- | |
いきなりですが、ノイズ処理の上級編です。 | |
|
| |
ImageMagickのnoiseコマンドを使って画像のノイズを取ります。 ミソは一定の変化率になるまで再帰処理を行うところです。 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
saikiS =1 '再帰処理を行う NRR =0.995 '再帰処理の閾値 NRR_1 =0.950 'シャープファイルの閾値 NRR_2 =0.2 '再帰処理のストップ値(暴走対策) NoiseN =30 '再帰処理回数の上限値(暴走対策) noiseR =3 'ノイズ処理の半径 noiseR2 =noiseR +2 '*******1-ノイズ取り(S)******* Sub Convert_Noize(NoiseF) NoiseF2 ="-1-NR" Wscript.sleep 100 NoiseF1 =replace(Root ,"." ,NoiseF2 & "--.") NoiseF =replace(Root ,"." ,NoiseF2 & ".") Set objFile = objFso.GetFile(home3 & Root) Root_Size =Replace(formatNumber(objFile.Size, 0) ,"," ,"") Set objFile = Nothing Call imagick.Convert("-noise" ,noiseR , home3 & Root ,home3 & NoiseF1) Wscript.sleep 4000 if saikiS =1 then for m=2 to noiseN Set objFile = objFso.GetFile(home3 & NoiseF1) OLD_Size =Replace(formatNumber(objFile.Size, 0) ,"," ,"") Set objFile = Nothing Call imagick.Convert("-noise" ,noiseR ,home3 & NoiseF1 ,home3 & NoiseF1) Wscript.sleep 4000 Set objFile = objFso.GetFile(home3 & NoiseF1) NEW_Size =Replace(formatNumber(objFile.Size, 0) ,"," ,"") Set objFile = Nothing if int(OLD_Size) *NRR > int(NEW_Size) and int(NEW_Size) >int(OLD_Size) *NRR_1 then if objFso.FileExists(home3 & replace(NoiseF1 ,"--" ,"_sharp")) =False then objFso.CopyFile home3 & NoiseF1 ,home3 & replace(NoiseF1 ,"--" ,"_sharp") end if end if if int(NEW_Size) >int(OLD_Size) *NRR then RR =m exit for elseif int(NEW_Size) exit for end if next end if objFso.MoveFile home3 & NoiseF1 ,home3 & NoiseF NoiseF2 =Replace(NoiseF ,"NR" ,"NR_soft") Call imagick.Convert("-noise" ,noiseR2 ,home3 & NoiseF ,home3 & NoiseF2) Wscript.sleep 4000 End Sub '*******1-ノイズ取り(E)******* [EOF] |
| |
Win7/Corei3/Memory4GBの環境で何とか動いています。 概要を簡単に書くと、 ImageMagickのnoiseコマンド処理前後のファイル容量を 比較(後/前)して、任意の値以上になるまで処理を繰り返す というプログラム(vbs)です。 9行目までは、設定です。このプログラムでは、 比較(後/前)値が0.995(=NRR)になるまで続けます。 その前に、0.950(=NRR_1)になったところで中間ファイルを出力。 ファイル容量が元ファイルの0.2(NRR_2)になったら、 または処理回数が30回になったら処理を中止します。 6,7行目は暴走対策の意味合いです。 8行目のnoiseR=3は、600ppiのスキャン画像用の値。 1200ppiの画像だとnoiseR=6とします。 9行目はソフト画像用の設定です。 12~16行目はファイル名の設定です。(任意にどうぞ) Rootは元ファイル名の変数です。 NoiseF1は再帰処理途中の作業ファイル名の変数で、 NoiseF2は処理終了後の最終ファイル名の変数です。 18~20行目で元ファイルの容量をゲットしています。 (home3は元ファイルの存在するフォルダー) 22行目は1回目の処理。 26~50行目でノイズ処理前後のファイル容量を比較しながら、 進めています。 途中、39~43行目で中間ファイルを出力してます。 60行目はノイズ処理の半径を広げてソフト画像作っています。 Xという元ファイルを入力すると、 X-1-NR_sharp、X-1-NR、X-1-NR_softといったファイルを出力します。 グラビアサイズだと十数分から長い時で数十分掛かります。 処理後の画像を目で見て確かめるのは、 その場の明かりの状況や気分などによりますし、 何より目が疲れます。 ファイル容量という定量尺度で処理するとバラツキも 抑えられると思い、数ヶ月前から使用しています。 使用時に注意することは、 (プロセス)優先度の設定→低を忘れないことでしょうか 忘れると、このプロセス実行中はPCがほぼ使えません。 以上、ノイズ処理の上級編でした。 ≪追伸≫ 是非、ImageMagickをインストールして試して下さい。 また、他の色んな処理方法について情報をお寄せ下さい。 | |
|
----------【下の記事もお薦めです。】----------
VBScript Tips-2- (2016/01/14)
VBScript Tips-1- (2016/01/07)
VBScript Tips-0- (2015/12/12)
-----------------------------------------