使いそうな項目を手あたり次第まとめました。
以下、画像データを格納したnumpy
配列を変数img
など、画像リストはimgs
などで代表させます。また、直接的な対応がつかないものも多々あるのでご注意ください。
1. Fileメニュー
拡張子によってはtifffile
, mrcfile
などのインストールが必要です。
ImageJ | Python | 備考 |
---|---|---|
File>Open |
skimage.io.imread , tifffile.imread など |
|
File>Save |
skimage.io.imsave , tifffile.imsave など |
2. Editメニュー
ほとんどGUIやROI関連なので割愛します。
3. Imageメニュー
ImageJ | Python | 備考 |
---|---|---|
Image>Type>8-bit | img.astype(np.uint8) |
|
Image>Type>16-bit | img.astype(np.uint16) |
|
Image>Type>32-bit | img.astype(np.float32) |
|
Image>Adjust>threshold |
img > thr ,img < thr
|
thr は閾値で、skimage.filters.threshold_otsu などを使って推定可能 |
Image>Color>Split Channels | [img[:, i] for i in range(img.shape[1])] |
i がどの次元に対応するかは画像による |
Image>Color>Merge Channels | np.stack(imgs) |
|
Image>Stack>Images to Stack | np.stack(imgs) |
|
Image>Stack>Stack to Images | [img[:, i] for i in range(img.shape[1])] |
i がどの次元に対応するかは画像による |
Image>Stack>Make Montage | np.block([[img1, img2],[img3, img4]]) |
チャネルごとに色分けする場合はRGBに直す必要がある。また、2×2に3つの画像を配置する場合は最後の空欄用の配列も与える必要がある。 |
Image>Stack>Reslice | skimage.measure.profile_line |
|
Image>Stack>Z Project |
np.mean(img, axis=0) など |
Z Projectの種類と画像の次元によって関数やaxis を使い分ける |
Image>Hyperstacks>Stack to Hyperstack | img.reshape |
|
Image>Hyperstacks>Stack to Hyperstack | img.reshape |
|
Image>Crop |
img[100:300,200:400] など |
|
Image>Duplicate | img.copy() |
|
Image>Scale |
skimage.transform.rescale またはskimage.transform.resize
|
何倍かを指定する場合はrescale 、最終的な形状を指定する場合はresize
|
Image>Transform>Flip Horizontally | img[:, :, ::-1] |
xがどの次元なのか要確認 |
Image>Transform>Flip Vertically | img[:, ::-1, :] |
yがどの次元なのか要確認 |
Image>Transform>Flip Z | img[::-1, :, :] |
zがどの次元なのか要確認 |
Image>Transform>Rotate 90 Degrees to Right | np.rot90(img, 3) |
|
Image>Transform>Rotate 90 Degrees to Left | np.rot90(img) |
|
Image>Transform>Rotate | skimage.transform.rotate |
|
Image>Transform>Translate | scipy.ndimage.shift |
|
Image>Transform>Bin |
img.shape==(100, 200) で2×2のbinningをかけるとすると、img.reshape(50, 2, 100, 2).mean(axis=(1, 3)) で実現できる。 |
|
Image>Transform>Zoom |
skimage.transform.rescale またはskimage.transform.resize
|
何倍かを指定する場合はrescale 、最終的な形状を指定する場合はresize
|
Binningのやり方
4. Processメニュー
ImageJ | Python | 備考 |
---|---|---|
Process>Smooth | scipy.ndimage.uniform_filter(img, size=3) |
|
Process>Sharpen | scipy.ndimage.convolve(img, np.array([[-1,-1,-1],[-1,12,-1],[-1,-1,-1]])/4) |
|
Process>Find Edges |
skimage.filters.sobel , skimage.filters.prewitt など |
|
Process>Find Maxima | skimage.morphology.local_maxima |
skimage.morphology.h_maxima, skimage.features.peak_local_max などのほうが高性能 |
Process>Enhance Contrast | skimage.filters.rank.enhance_contrast |
|
Process>Noise>... |
np.random などで代用 |
|
>Process>Binary>Erode | skimage.morphology.binary_erosion |
|
Process>Binary>Dilate | skimage.morphology.binary_dilation |
|
Process>Binary>Open | skimage.morphology.binary_opening |
|
Process>Binary>Close | skimage.morphology.binary_closing |
|
Process>Binary>Fill Holes | scipy.ndimage.binary_fill_holes |
|
Process>Binary>Skeletonize |
skimage.morphology.skeletonize またはskimage.morphology.medial_axis
|
|
Process>Binary>Distance Map |
scipy.ndimage.distance_transform_edt など |
|
Process>Binary>Watershed | skimage.segmentation.watershed |
前処理が必要。こちらを参考。 |
Process>Binary>Voronoi |
scipy.spatial.Voronoi を利用 |
けっこう大変 |
Process>Math |
numpy でOK |
|
Process>FFT |
scipy.fft.fftn , scipy.fft.ifft , np.fft.fftshift を使う |
np.fft モジュールでは強制的にnp.complex128 に直されるので、オーバーフローのおそれがある |
Process>Filters>Convolve | scipy.ndimage.convolve |
|
Process>Filters>Gaussian Blur (3D) | skimage.filters.gaussian |
|
Process>Filters>Median (3D) | skimage.filters.median |
Radiusと等価なfootprint はskimage.morphology.disk で作れる |
Process>Filters>Mean (3D) |
scipy.ndimage.convolve で代用 |
Radiusと等価なfootprint はskimage.morphology.disk で作れる |
Process>Filters>Minimum (3D) | scipy.ndimage.minimum_filter |
Radiusと等価なfootprint はskimage.morphology.disk で作れる |
Process>Filters>Maximum (3D) | scipy.ndimage.maximum_filter |
Radiusと等価なfootprint はskimage.morphology.disk で作れる |
Process>Filters>Variance (3D) |
scipy.ndimage.convolve(img**2, disk) - scipy.ndimage.convolve(img, disk) で実現可能 |
|
Process>Filters>Top Hat |
skimage.morphology.white_tophat またはskimage.morphology.black_tophat
|
Radiusと等価なfootprint はskimage.morphology.disk で作れる |
Process>Filters>Image Calculator |
numpy でOK |
|
Process>Filters>Subtract Background | skimage.restoration.rolling_ball |
ImageJでは先に3×3のmean filterをかけており、また8-bitにして計算しているため注意。 |
5. Analyzeメニュー
ImageJではROIを使いますが、skimage
ではラベルを使います。そのため、対応がほとんどつきません。唯一対応が分かりやすいのは
ImageJ | Python | 備考 |
---|---|---|
Analyze>Analyze Particles | skimage.measure.label |
でしょうか。
以下では、skimage.measure.regionprops
による計測と、ImageJのMeasureとの対応を書きます。ImageJでは"Analyze>Set Measurement"で計測する特徴量を指定する一方で、skimage.measure.regionprops
では返り値のRegionProperties
オブジェクトのpropertyとして特徴量を取得します。サポートされていない特徴量はextra_properties=...
を与えることで対応できます。
RegionProperties
オブジェクトをprops
とします。
ImageJのSet Measurement | RegionProperties | 備考 |
---|---|---|
Area | props.area |
|
Mean gray value | props.intensity_mean |
|
Standard deviation |
extra_properties で対応 |
|
Modal gray value |
extra_properties で対応 |
|
Min & max gray value |
props.intensity_min とprops.intensity_max
|
|
Centroid | props.centroid |
|
Center of mass | props.centroid_weighted |
|
Perimeter |
props.perimeter またはprops.perimeter_crofton
|
|
Bounding rectangle | props.bbox |
|
Fit ellipse |
props.orientation , props.axis_minor_length , props.axis_major_length を使う |
|
Shape descriptors |
props.eccentricity やprops.solidity など |
|
Feret's diameter | props.feret_diameter_max |
|
Integrated density |
props.area とprops.mean を使う |
|
Median |
extra_properties で対応 |
|
Skewness |
extra_properties で対応 |
|
Kurtosis |
extra_properties で対応 |
|
Area fraction |
extra_properties で対応 |