code: def get_preprocessing_params(
      config_obj: ModelConfig,
  ) -> PreprocessingConfigDict:
      """Returns a new dictionary that merges preprocessing section of config with type-specific preprocessing
      parameters from config defaults."""
      preprocessing_params = {}
      preprocessing_params.update(config_obj.preprocessing.to_dict())
      for feat_type in get_input_type_registry().keys():
          if hasattr(config_obj.defaults, feat_type):
              preprocessing_params[feat_type] = getattr(
                  config_obj.defaults, feat_type
              ).preprocessing.to_dict()
      return preprocessing_params
  
file_path: ludwig/ludwig/utils/config_utils.py
imports: from typing import Any, Dict, Set, Union
  from ludwig.api_annotations import DeveloperAPI
  from ludwig.constants import DECODER, ENCODER, IMAGE, INPUT_FEATURES, MODEL_ECD, MODEL_LLM, MODEL_TYPE, PREPROCESSING, SEQUENCE, TEXT, TIMESERIES, TYPE
  from ludwig.features.feature_registries import get_input_type_registry
  from ludwig.schema.model_config import ModelConfig
  from ludwig.types import FeatureConfigDict, FeatureTypeDefaultsDict, PreprocessingConfigDict
label_desc: Use image node_id 3 for calling a global function with example usage: get_preprocessing_params(config_obj) and returns: preprocessing_params