A fairly accurate simulation of digital camera operation from photons hitting the sensor to their conversion into a digital signal. I will not force you to calculate the parameters of a particular camera, so I took the average statistical ones: on average 500 photons hit a pixel, native ISO is 400, and each ISO step changes the gain by 6 decibels. I remind you that ISO is not a tool for changing exposure: all other things being equal (and this node does not take aperture and exposure time into account), ISO 100 and ISO 1600 will look almost the same.
它相当精确地模拟了数码相机从光子撞击传感器到将其转换为数字信号的整个过程。我不会强迫您计算特定相机的参数,因此我采用了平均统计参数:平均 500 个光子撞击一个像素,原生 ISO 为 400,每一级 ISO 会改变增益 6 分贝。我要提醒您的是,ISO 并不是改变曝光的工具:在其他条件相同的情况下(这个节点没有考虑光圈和曝光时间),ISO 100 和 ISO 1600 看起来几乎是一样的。
Достаточно точная симуляция работы цифрового фотоаппарата от попадания фотонов на матрицу до их преобразования в цифровой сигнал. Я не буду заставлять вас рассчитывать параметры конкретного фотоаппарата, поэтому взял среднестатистические: в среднем на пиксель попадает 500 фотонов, нативный ISO равен 400, а каждый шаг ISO меняет усиление на 6 децибел. Напоминаю, что ISO не является инструментом изменения экспозиции: при прочих равных (а в этой ноде не учитываются диафрагма и время экспозиции), ISO 100 и ISO 1600 будут выглядеть почти одинаково.
Description
FAQ
Comments (5)
Wanted to give this a try but got an error about the script using 'np.int'.
This is the first time I've manually installed a custom node though, and I just dropped your ISOSimulation folder (the one including the init.py) into the custom nodes folder of my ComfyUI where the other nodes are installed to automatically. Anything I've missed?
It's not related to the installation, try to send the error in its entirety, we'll try to figure it out
@Z_phyr Alright, this is it:
Error occurred when executing ISOSimulation:
module 'numpy' has no attribute 'int'. np.int was a deprecated alias for the builtin int. To avoid this error in existing code, use int by itself. Doing this will not modify any behavior and is safe. When replacing np.int, you may wish to use e.g. np.int64 or np.int32 to specify the precision. If you wish to review your current use, check the release note link for additional information. The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
File "D:\ComfyUI\ComfyUI\execution.py", line 155, in recursive_execute output_data, output_ui = get_output_data(obj, input_data_all)
File "D:\ComfyUI\ComfyUI\execution.py", line 85, in get_output_data return_values = map_node_over_list(obj, input_data_all, obj.FUNCTION, allow_interrupt=True)
File "D:\ComfyUI\ComfyUI\execution.py", line 78, in map_node_over_list results.append(getattr(obj, func)(**slice_dict(input_data_all, i)))
File "D:\ComfyUI\ComfyUI\custom_nodes\ISOSimulation\ISOSimulation.py", line 23, in isosimulation noise = (np.round(np.random.normal(scale=2.29, size=shot_noise.shape) + shot_noise) * 5.88).astype(np.int) + 100
File "D:\ComfyUI\python_embeded\lib\site-packages\numpy\__init__.py", line 305, in getattr raise AttributeError(__former_attrs__[attr])
@redpinkretro This is not an error message but a warning, I have now reuploaded the file, you can download it and check it out
@Z_phyr That fixed it and it works just fine now, thank you! I don't notice much of a difference between 100-1600, but I enjoy the graininess it adds.



