The recent iPhone Pro Max models have Apple ProRAW and can be enabled by default for the iOS camera, but if you have the non-Pro Max models you will need specific camera apps to allow you to make the most of the camera sensor.
The Halide MkII app has been a very good camera app that gives us RAW images - coupled with the OpenSource RAW editor RawTherapee we have, in my opinion, the basis for acceptable iPhone digital workflow.
RawTherapee
RawTherapee is a RAW processor and like many RAW processors generates sidecar files containing the edits associated with each file and uses profile to control how the initial/first time seen RAW file rendering is performed. There exits 2 types of profile: auto matched tone curve (AMTC) and standard film curve with their variations for low/med/high ISO equivalants - the former is noted as to automatically adjust [settings] to match the look of the embedded JPEG thumbnail which is a good starting point.Halide/iOS WB corrected only with AMTC only with before/after minor adjustments
For Halide RAW files even with low ISO, the images are rendered fairly flat even with AMTC - I find that the Exposure -> Saturation needs to be set in the 15-30 range to provide a good basis for processing. For comparison against, Nikon NEFs with AMTC require much less saturation boosts to get close to OoC jpeg rendering.
Nikon default rendering with AMTC adjustment only
Noise
Given the iPhone sensor size, anything above base ISO seems to have noticable noise artifacts but these can be cleaned up using the LMMSE or IGB Demosaicing algorithms and some minor noise reduction.Halide RAW ISO200, demosaic algorithm LMMSE - minor cleanup top: see noise on PCB on right
Key Processing
The key processing elements that I find are adjusted on each image and are the basis for most of my processing profiles, starting with the ATMC bundle profile:- Exposure
- Saturation
- Shadows/Highlights - Highlights
- Detail
- Sharpening
- Local Contrast - Darkness/Lightness levels: 30-40
- Noise Reduction - Luminance: 30-70, Detail Recovery: 60-100
- Raw
- Demosaicing - AMaZE (low ISO), LMMSE or IGV (med-high ISO)/li>
- Capture Sharpening - Contrast Threshold
Dynamic Profiles
Obviously having to add all adjustments to each RAW file is suboptimal even with saved profiles. However, RawTherapee provides dynamic profiles that applies specific profiles based on specific file metadata, such as camera model or lens. The default profile selection is controlled by: Settings -> Image Processing -> For raw photos -> (Dynamic):Ensure that the auto matched tone curve button is reselected on each RAW image
RAW generated images
Once the output files (jpeg etc) are generated, you may want to re-embed the processed files into the RAW files viaexiftool
. A useful script to to update a set of corresponding jpg
and dng
: for i in *.jpg; do dng-preview-upd "${i%.jpg}.DNG"; done
cat > dng-preview-upd << EOF
#!/bin/bash
ARG0=$(basename $0)
function usage() {
echo "usage: $ARG0 <dng> <jpg preview>"
}
[ $# -ne 2 -a $# -ne 1 ] && usage && exit 1
EXIFTOOL=${DNG_PREVIEW_UPDATE_EXIFTOOL:-/usr/local/Image-ExifTool-12.70/exiftool}
[ ! -x $EXIFTOOL ] && echo "$ARG0: no such executable '$EXIFTOOL'" && exit 1
PREVIEW=$2
DNG=$1
[ ! -f "$DNG" ] && echo "$ARG0: no such file '$DNG'" && exit 1
MIME_TYPE=xdg-mime
which ${MIME_TYPE} 2>&1 >/dev/null
if [ $? -eq 0 ]; then
WHAT_TYPE="$(${MIME_TYPE} query filetype "${DNG}")"
if [ "$WHAT_TYPE" != "image/x-adobe-dng" ]; then
echo "$ARG0: invalid dng type - ${WHAT_TYPE}: $DNG"
exit 1
fi
fi
# 12.70 and below cannot add a preview image if one doesnt exist
HAS_PREVIEW=$($EXIFTOOL -PreviewImageLength "$DNG")
[ -z "$HAS_PREVIEW" ] && echo "$ARG0: no current preview image, unable to process '$DNG' - try 'dnglab convert -d --dng-preview true INPUT.dng OUTPUT.dng' to rebuild" && exit 1
if [ -z "${PREVIEW}" ]; then
PREVIEW="${DNG%.*}.jpg"
if [ ! -f "$PREVIEW" ]; then
PREVIEW="${DNG%.*}.JPG"
if [ ! -f "$PREVIEW" ]; then
usage
exit 2;
fi
fi
fi
if [ "$(identify -quiet -format "%m\n" "${PREVIEW}")" != "JPEG" ]; then
echo "$ARG0: preview, ${PREVIEW}, is not JPEG"
exit 2
fi
DPU_VERBOSE="-q"
if [ ! -z "$DNG_PREVIEW_UPDATE_VERBOSE" ]; then
DPU_VERBOSE="-v2"
fi
DPU_OVERWRITE_ORIG="-overwrite_original"
if [ ! -z "$DNG_PREVIEW_UPDATE_KEEP" ]; then
DPU_OVERWRITE_ORIG=""
fi
# checks for broken DNGs from halide that put preview images in a different place
IFD_TAG=ifd0
${EXIFTOOL} -if '$SubIFD1:SubFileType eq 1' -b -w1 ${DNG};
if [ $? -eq 0 ]; then
IFD_TAG=subifd1
fi
exec $EXIFTOOL \
${DPU_OVERWRITE_ORIG} ${DPU_VERBOSE} \
"-previewImage<=${PREVIEW}" \
-tagsfromfile "${PREVIEW}" \
"-${IFD_TAG}:imagewidth<imagewidth" "-${IFD_TAG}:imageheight<imageheight" "-${IFD_TAG}:rowsperstrip<imageheight" \
-ModifyDate="$(date -u +"%Y:%m:%d %H:%M:%S")" \
"${DNG}"
EOF
No comments:
Post a Comment