Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

extracting patch of a certain size at certain angle with given center from an image using python

For my project I want to extract a patch of size 224x224 from an image of size 1024x720 at a specific angle using python. The pixel location for the patch center on the image is given and the angle made by patch is also given. I know how to extract patch at 0(degree) angle using array slicing, but i want to slice the image at an angle. Any help regarding the same will be appreciated. thanks!

enter image description here

like image 724
Rozen Moon Avatar asked Oct 19 '25 13:10

Rozen Moon


1 Answers

from scipy import ndimage
import numpy as np
import math as m
import cv2   
 def patchmaker(img,height,width,center_y,center_x,angle):
        theta = angle/180*3.14
        img_shape = np.shape(img)
        print(img_shape)
        x = [[i for i in range(0,img_shape[1])] for y in range(img_shape[0])]
        y = [[j for i in range(img_shape[1])] for j in range(0,img_shape[0])]
        x = np.asarray(x)
        y = np.asarray(y)
        rotatex = x[center_y-m.floor(height/2):center_y+m.floor(height/2),center_x-m.floor(width/2):center_x+m.floor(width/2)]
        rotatey = y[center_y-m.floor(height/2):center_y+m.floor(height/2),center_x-m.floor(width/2):center_x+m.floor(width/2)]
        coords   = [rotatex.reshape((1,height*width))-center_x,rotatey.reshape((1,height*width))-center_y]
        coords = np.asarray(coords)
        coords = coords.reshape(2,height*width)
        roatemat = [[m.cos(theta),m.sin(theta)],[-m.sin(theta),m.cos(theta)]]
        rotatedcoords = np.matmul(roatemat,coords)
        patch = ndimage.map_coordinates(img,[rotatedcoords[1]+center_y,rotatedcoords[0]+center_x], order=1, mode='nearest').reshape(height,width)
        return patch
like image 181
Rozen Moon Avatar answered Oct 21 '25 03:10

Rozen Moon



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!