12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ImageJ → Python/scikit-imageのチートシート

Posted at

使いそうな項目を手あたり次第まとめました。

以下、画像データを格納した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と等価なfootprintskimage.morphology.diskで作れる
Process>Filters>Mean (3D) scipy.ndimage.convolveで代用 Radiusと等価なfootprintskimage.morphology.diskで作れる
Process>Filters>Minimum (3D) scipy.ndimage.minimum_filter Radiusと等価なfootprintskimage.morphology.diskで作れる
Process>Filters>Maximum (3D) scipy.ndimage.maximum_filter Radiusと等価なfootprintskimage.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と等価なfootprintskimage.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_minprops.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.eccentricityprops.solidityなど
Feret's diameter props.feret_diameter_max
Integrated density props.areaprops.meanを使う
Median extra_propertiesで対応
Skewness extra_propertiesで対応
Kurtosis extra_propertiesで対応
Area fraction extra_propertiesで対応
12
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?