# Input Specification This wrapper accepts one 3D brain CT NIfTI and writes one binary intracranial hemorrhage mask NIfTI. The model is a 2D slice SAMIHS model, so input array order and slice direction matter. ## Required Format | Item | Requirement | |---|---| | File type | NIfTI, `.nii` or `.nii.gz`. DICOM folders are not accepted directly. | | Dimensionality | Exactly 3D. 4D/time-series/multi-channel files are not supported. | | Pixel data | Single-channel numeric CT-like image. Integer or float is acceptable. | | Invalid values | Avoid NaN/Inf. The model was tested on finite CT volumes. | | Output geometry | Output mask uses the same shape, affine, and header geometry as input. | | Output values | `uint8` binary label, values `0` and `1`. | ## Recommended Image Domain The model has been used and validated mainly on the project-standard brain CT volumes, for example: ```text /data2/gzk/256_standardized_brain_rescale/**/*.nii /data2/wxh/Medical/.../euler10/two_stage/nii/sample_*/real.nii.gz /data2/wxh/Medical/.../euler10/two_stage/nii/sample_*/gen.nii.gz ``` Recommended input characteristics: - Axial brain CT volume, already converted to NIfTI. - Brain/head is centered and roughly aligned like the project data. - Typical in-plane size is `256x256` or `512x512`; other sizes are resized slice-wise to `1024x1024` for the model. - Typical slice count is much smaller than in-plane dimensions, e.g. `16-180` slices. - CT contrast should be similar to the training/evaluation data. Raw HU-like or project windowed CT-like values are acceptable because the wrapper performs per-slice percentile clipping and min-max normalization before inference. ## Intensity Handling The model does not threshold raw HU values directly. For each 2D slice, the wrapper does: ```text clip slice to [0.5 percentile, 99.5 percentile] min-max normalize clipped slice to [0, 1] resize to 1024x1024 run SAMIHS sigmoid(logits) >= 0.5 -> binary mask ``` Implications: - Absolute HU scale is not preserved inside the model input. - A globally rescaled CT can still run if local contrast is similar. - Strongly different preprocessing can hurt results: inverted contrast, aggressive z-score normalization, heavily saturated windows, full-body/non-brain CT, or large black borders may cause domain shift. ## Direction and Axis Requirements The wrapper does not reorient the NIfTI based on affine orientation. It reads the voxel array as stored and processes 2D slices along one axis. Default behavior: ```text --slice-axis auto ``` `auto` chooses the smallest dimension as the slice/depth axis. This is correct for common project volumes such as: ```text (256, 256, 32) -> slice_axis = 2 (512, 512, 32) -> slice_axis = 2 (32, 512, 512) -> slice_axis = 0 ``` If the depth axis is not the smallest dimension, set it explicitly: ```bash --slice-axis 0 --slice-axis 1 --slice-axis 2 ``` The original SAMIHS inference convention includes a 90-degree slice rotation before inference and the inverse rotation after inference. This wrapper keeps that behavior by default. Do not use `--no-rotate` unless you are testing a known different orientation convention. ## Practical Sanity Checks After inference, check at least these properties: ```text mask.shape == input.shape mask affine == input affine unique(mask) is subset of {0, 1} mask nonzero voxel count is clinically plausible for the case overlay mask on input CT to confirm left/right and anterior/posterior alignment ``` If the mask appears mirrored or rotated in an overlay, first verify: - Whether `--slice-axis` is correct. - Whether the input was transposed or reoriented before calling the wrapper. - Whether `--no-rotate` was accidentally used. - Whether the input follows the same orientation convention as the project-standard CT volumes. ## Known Limitation This is not a 3D model. It segments each slice independently and stacks the results into a 3D mask. It does not use through-plane context, and it does not enforce 3D connectedness or temporal consistency.