なにも表示されないときは、|ホーム|をクリックして下さい
↓↓↓ 今日のおっぱい ↓↓↓
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
VBScript Tips-3-    
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
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) RR =m
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)
-----------------------------------------
2016-05-02-Mon [ コメント - 0 | カテゴリ - VBScript Tips ] page top

コメント

 管理者にだけ表示を許可する
Copyright © 2024 NpScan Blog | おっぱい大好き. all rights reserved.