Project Aims
The goal of pyautocv
is to provide a simple computer vision(cv) workflow that enables one to automate
or at least reduce the time spent in image (pre)-processing.
Installing the package
From PyPI
pip install pyautocv
From GitHub
pip install git+https://github.com/Nelson-Gon/pyautocv.git
#or
# clone the repo
git clone https://www.github.com/Nelson-Gon/pyautocv.git
cd pyautocv
python3 setup.py install
Example Usage
Note: Although these methods can be run via this script, the script is less flexible and might be useful for quick exploration but not extended analysis.
To run the script at the commandline, we can do the following
python -m pyautocv -d "images/cats" -s "png" -m "thresh_to_zero" -o "threshold" -mt 200 -t 100
Sample Result
To perform edge detection
python -m pyautocv -d "images/biology" -s "jpg" -o "detect_edges" -m "sobel_vertical" -k 3
To smooth images
python -m pyautocv -d "images/houses" -s "jpg" -o "smooth" -m "gaussian" -k 5 5 --sigma 0.7
To get help
python -m pyautocv -h
Further exploration is left to the user.
The following section shows how to use the more flexible class/methods approach
- Image Gra(e)ying
To grey an image directory
from pyautocv.segmentation import Segmentation, gray_images, show_images
images_list=Segmentation("images/cats")
show_images(gray_images(images_list.read_images()), images_list.read_images(), number=2)
- Smoothing
To smooth a directory of images, we can use EdgeDetection
's smooth
method as
follows
images_list=Segmentation("images/cats")
show_images(images_list.smooth(), images_list.read_images(),number=2)
This will give us
The above uses default parameters including an rgb
color mode. For biological images which are often in
grayscale, one can set color_mode
to gray as shown below. All other operations will remain the same.
images_list_gray_mode=Segmentation("images/dic", image_suffix ="tif", color_mode = "gray")
show_images(images_list_gray_mode.read_images(), images_list_gray_mode.threshold_images(), number = 4)
Result
To use a different filter
images_list = Segmentation("images/cats")
show_images(images_list.read_images(), images_list.smooth(mask="median", kernel_shape=(7, 7)))
- Edge Detection
To detect edges in a directory of images, we can use Segmentation
's detect_edges
.
show_images(images_list.read_images(), images_list.detect_edges(operator="roberts", mask="gaussian", sigma=0.8))
The above will give us the following result
To use a different filter e.g Laplace,
show_images(images_list.read_images(), images_list.detect_edges(operator="laplace", mask="gaussian", sigma=0))
This results in
- Thresholding
To perform thresholding, we can use the method threshold_images
.
to_threshold = Segmentation("images/biology")
show_images(to_threshold.read_images(),to_threshold.threshold_images())
To use a different thresholding method.
show_images(to_threshold.read_images(),to_threshold.threshold_images(threshold_method="otsu"))
The above gives us:
For cat lovers, here's thresholding with inverse binary.
show_images(images_list.read_images(),images_list.threshold_images(threshold_method="binary_inverse"))
Result:
Thresholding applied to images of houses.
images_list=Segmentation("images/houses")
show_images(images_list.read_images(), images_list.threshold_images(threshold_method="thresh_to_zero"))
images_list=Segmentation("images/potholes")
show_images(images_list.read_images(), images_list.threshold_images("binary"))
These and more examples are available in example.py. Image sources are
shown in sources.md
. If you feel attribution was not made, please file an issue and cite the violating image.
Citation
Nelson Gonzabato(2021) pyautocv: (Semi) Automated Image Processing, https://github.com/Nelson-Gon/pyautocv.
@misc {Gonzabato2021,
author = {Gonzabato, N},
title = {pyautocv: (Semi) Automated Image Processing},
year = {2021},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/Nelson-Gon/pyautocv}},
commit = {7fe2e0f7894e8be4588a22758e8097c247cd1cd9}
Thank you very much
“A language that doesn't affect the way you think about programming is not worth knowing.” ― Alan J. Perlis
References