#393 CLI-Overrides
parent
feb5441251
commit
b16e76370b
@ -1,4 +1,4 @@
|
|||||||
__pycache__
|
__pycache__
|
||||||
junk/
|
junk/
|
||||||
.vscode/launch.json
|
.vscode
|
||||||
.ipynb_checkpoints/
|
.ipynb_checkpoints/
|
||||||
|
@ -0,0 +1,142 @@
|
|||||||
|
class NlmeansController():
|
||||||
|
"""
|
||||||
|
s: double
|
||||||
|
|
||||||
|
Denoising strength (from 1 to 30) (default 1)
|
||||||
|
Trade-off between noise removal and detail retention. Comparable to gaussian sigma.
|
||||||
|
|
||||||
|
p: int patch size (from 0 to 99) (default 7)
|
||||||
|
|
||||||
|
Catches larger areas reducing broader noise patterns, but costly
|
||||||
|
|
||||||
|
pc: int patch size for chroma planes (from 0 to 99) (default 0)
|
||||||
|
|
||||||
|
r: int research window (from 0 to 99) (default 15)
|
||||||
|
|
||||||
|
Range to search for comparable patches.
|
||||||
|
Better filtering but costly
|
||||||
|
|
||||||
|
rc: int research window for chroma planes (from 0 to 99) (default 0)
|
||||||
|
|
||||||
|
Good values to denoise film grain that was subobtimally encoded:
|
||||||
|
strength: float = 2.8
|
||||||
|
patchSize: int = 12
|
||||||
|
chromaPatchSize: int = 8
|
||||||
|
researchWindow: int = 22
|
||||||
|
chromaResearchWindow: int= 16
|
||||||
|
"""
|
||||||
|
|
||||||
|
DEFAULT_STRENGTH: float = 2.8
|
||||||
|
DEFAULT_PATCH_SIZE: int = 13
|
||||||
|
DEFAULT_CHROMA_PATCH_SIZE: int = 9
|
||||||
|
DEFAULT_RESEARCH_WINDOW: int = 23
|
||||||
|
DEFAULT_CHROMA_RESEARCH_WINDOW: int= 17
|
||||||
|
|
||||||
|
def __init__(self,
|
||||||
|
parameters: str = "none",
|
||||||
|
strength: str = "",
|
||||||
|
patchSize: str = "",
|
||||||
|
chromaPatchSize: str = "",
|
||||||
|
researchWindow: str = "",
|
||||||
|
chromaResearchWindow: str = "",
|
||||||
|
useHardware: bool = False):
|
||||||
|
|
||||||
|
self.__isActive = (parameters != "none"
|
||||||
|
or strength
|
||||||
|
or patchSize
|
||||||
|
or chromaPatchSize
|
||||||
|
or researchWindow
|
||||||
|
or chromaResearchWindow)
|
||||||
|
self.__useHardware = useHardware
|
||||||
|
|
||||||
|
parameterTokens = parameters.split(',')
|
||||||
|
|
||||||
|
self.__strengthList = []
|
||||||
|
if strength:
|
||||||
|
strengthTokens = strength.split(',')
|
||||||
|
for st in strengthTokens:
|
||||||
|
try:
|
||||||
|
strengthValue = float(st)
|
||||||
|
except:
|
||||||
|
raise ValueError('NlmeansController: Strength value has to be of type float')
|
||||||
|
if strengthValue < 1.0 or strengthValue > 30.0:
|
||||||
|
raise ValueError('NlmeansController: Strength value has to be between 1.0 and 30.0')
|
||||||
|
self.__strengthList.append(strengthValue)
|
||||||
|
else:
|
||||||
|
self.__strengthList = [NlmeansController.DEFAULT_STRENGTH]
|
||||||
|
|
||||||
|
self.__patchSizeList = []
|
||||||
|
if patchSize:
|
||||||
|
patchSizeTokens = patchSize.split(',')
|
||||||
|
for pst in patchSizeTokens:
|
||||||
|
try:
|
||||||
|
patchSizeValue = int(pst)
|
||||||
|
except:
|
||||||
|
raise ValueError('NlmeansController: Patch size value has to be of type int')
|
||||||
|
if patchSizeValue < 0 or patchSizeValue > 99:
|
||||||
|
raise ValueError('NlmeansController: Patch size value has to be between 0 and 99')
|
||||||
|
if patchSizeValue % 2 == 0:
|
||||||
|
raise ValueError('NlmeansController: Patch size value has to an odd number')
|
||||||
|
self.__patchSizeList.append(patchSizeValue)
|
||||||
|
else:
|
||||||
|
self.__patchSizeList = [NlmeansController.DEFAULT_PATCH_SIZE]
|
||||||
|
|
||||||
|
self.__chromaPatchSizeList = []
|
||||||
|
if chromaPatchSize:
|
||||||
|
chromaPatchSizeTokens = chromaPatchSize.split(',')
|
||||||
|
for cpst in chromaPatchSizeTokens:
|
||||||
|
try:
|
||||||
|
chromaPatchSizeValue = int(pst)
|
||||||
|
except:
|
||||||
|
raise ValueError('NlmeansController: Chroma patch size value has to be of type int')
|
||||||
|
if chromaPatchSizeValue < 0 or chromaPatchSizeValue > 99:
|
||||||
|
raise ValueError('NlmeansController: Chroma patch value has to be between 0 and 99')
|
||||||
|
if chromaPatchSizeValue % 2 == 0:
|
||||||
|
raise ValueError('NlmeansController: Chroma patch value has to an odd number')
|
||||||
|
self.__chromaPatchSizeList.append(chromaPatchSizeValue)
|
||||||
|
else:
|
||||||
|
self.__chromaPatchSizeList = [NlmeansController.DEFAULT_CHROMA_PATCH_SIZE]
|
||||||
|
|
||||||
|
self.__researchWindowList = []
|
||||||
|
if researchWindow:
|
||||||
|
researchWindowTokens = researchWindow.split(',')
|
||||||
|
for rwt in researchWindowTokens:
|
||||||
|
try:
|
||||||
|
researchWindowValue = int(rwt)
|
||||||
|
except:
|
||||||
|
raise ValueError('NlmeansController: Research window value has to be of type int')
|
||||||
|
if researchWindowValue < 0 or researchWindowValue > 99:
|
||||||
|
raise ValueError('NlmeansController: Research window value has to be between 0 and 99')
|
||||||
|
if researchWindowValue % 2 == 0:
|
||||||
|
raise ValueError('NlmeansController: Research window value has to an odd number')
|
||||||
|
self.__researchWindowList.append(researchWindowValue)
|
||||||
|
else:
|
||||||
|
self.__researchWindowList = [NlmeansController.DEFAULT_RESEARCH_WINDOW]
|
||||||
|
|
||||||
|
self.__chromaResearchWindowList = []
|
||||||
|
if chromaResearchWindow:
|
||||||
|
chromaResearchWindowTokens = chromaResearchWindow.split(',')
|
||||||
|
for crwt in chromaResearchWindowTokens:
|
||||||
|
try:
|
||||||
|
chromaResearchWindowValue = int(crwt)
|
||||||
|
except:
|
||||||
|
raise ValueError('NlmeansController: Chroma research window value has to be of type int')
|
||||||
|
if chromaResearchWindowValue < 0 or chromaResearchWindowValue > 99:
|
||||||
|
raise ValueError('NlmeansController: Chroma research window value has to be between 0 and 99')
|
||||||
|
if chromaResearchWindowValue % 2 == 0:
|
||||||
|
raise ValueError('NlmeansController: Chroma research window value has to an odd number')
|
||||||
|
self.__chromaResearchWindowList.append(chromaResearchWindowValue)
|
||||||
|
else:
|
||||||
|
self.__chromaResearchWindowList = [NlmeansController.DEFAULT_CHROMA_RESEARCH_WINDOW]
|
||||||
|
|
||||||
|
def isActive(self):
|
||||||
|
return self.__isActive
|
||||||
|
|
||||||
|
def generateDenoiseTokens(self):
|
||||||
|
filterName = 'nlmeans_opencl' if self.__useHardware else 'nlmeans'
|
||||||
|
return ['-vf', f"{filterName}=s={self.__strengthList[0]}"
|
||||||
|
+ f":p={self.__patchSizeList[0]}"
|
||||||
|
+ f":pc={self.__chromaPatchSizeList[0]}"
|
||||||
|
+ f":r={self.__researchWindowList[0]}"
|
||||||
|
+ f":rc={self.__chromaResearchWindowList[0]}"] if self.__isActive else []
|
||||||
|
|
Loading…
Reference in New Issue