I have a 800MB high resolution image in .png format. I want to create a training set of smaller images, say 15-20 images. How can I do that in python/matlab using some simple method? 
            Asked
            
        
        
            Active
            
        
            Viewed 216 times
        
    -1
            
            
        
        Nicolas Gervais
        
- 33,817
 - 13
 - 115
 - 143
 
        Divyang Soni
        
- 3
 - 1
 
- 
                    Did you search SO? f.e. https://stackoverflow.com/questions/5953373/how-to-split-image-into-multiple-pieces-in-python – Patrick Artner Jun 07 '20 at 18:53
 - 
                    To be fair, the answers in the link are pretty horrible. There are more elegant solutions than using 4 nested for loops. – Nicolas Gervais Jun 07 '20 at 19:57
 - 
                    Do you mean you want to slice a big image into 5 images by 4 images? Or you want to resize the entire 800MB image down into 20 different images all containing the full picture at different sizes? – Mark Setchell Jun 08 '20 at 20:26
 - 
                    @MarkSetchell I want to perform Hough transform and certain Deep learning algorithms. I have a single large high-rez image, and I want to break it into smaller images/parts so that I have a set of images to perform my analysis. So, yes, I want to slice a big image into smaller pieces. – Divyang Soni Jun 12 '20 at 14:20
 
1 Answers
1
            I think the best way is currently skimage.util.view_as_blocks. 
import numpy as np
from skimage.util.shape import view_as_blocks
A = np.arange(4*4).reshape(4,4)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
B = view_as_blocks(A, block_shape=(2, 2))
B[0, 0]
The previous line will select the square at row 0, column 0:
array([[0, 1],
       [4, 5]])
        Nicolas Gervais
        
- 33,817
 - 13
 - 115
 - 143
 
- 
                    Thank you Nicolas, will surely try this solution and let you know... – Divyang Soni Jun 08 '20 at 19:27
 - 
                    Please don't feel I'm telling you or anybody else, what to do, but I have been making an effort to try and use non-square images lately, so that it is clearer to beginners/learners which dimension is which. I keep seeing 3x3 images with 3 RGB channels and can't help feeling it's far easier to see what's going on with a 5x4 image with 3 channels. – Mark Setchell Jun 08 '20 at 20:23
 - 
                    Great idea! I think the maintainers of `skimage` would love to hear your input on how their documentation can be improved! Here's how: https://scikit-image.org/docs/stable/contribute.html – Nicolas Gervais Jun 08 '20 at 21:33
 - 
                    I tried, but I seem to be making minor mistakes. I want to try it a few more times before I come back to you with an answer xD – Divyang Soni Jun 12 '20 at 14:22
 - 
                    @NicolasGervais i'm having problems loading the image into python. The image is a very high-rez satellite image, and there seem to be pixel limitations in PIL Image module. – Divyang Soni Jun 12 '20 at 14:40
 - 
                    oh. well i'm afraid i can only solve one problem at a time. you should maybe turn it into an array directly with cv2. i don't know – Nicolas Gervais Jun 12 '20 at 14:46