Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

determining chromatic components from an image in CIE-Lab space to compute euclidian distance.

Here is the following code that I have.

-- coding: utf-8 --

""" Created on Sun Feb 9 00:09:31 2020

@author: Shrouti """

import cv2 import numpy as np from PIL import Image, ImageCms from skimage import color

f = 500 rotXval = 90 rotYval = 90 rotZval = 90 distXval = 500 distYval = 500 distZval = 500

def onFchange(val): global f f = val

def onRotXChange(val): global rotXval rotXval = val

def onRotYChange(val): global rotYval rotYval = val

def onRotZChange(val): global rotZval rotZval = val

def onDistXChange(val): global distXval distXval = val

def onDistYChange(val): global distYval distYval = val

def onDistZChange(val): global distZval distZval = val

if __name__ == '__main__':

# Read input image, and create output image
src = cv2.imread("D:\SHROUTI\Testpictures\handgesture2.png")
src = cv2.resize(src, (640, 480))
dst = np.zeros_like(src)
h, w = src.shape[:2]

# Create user interface with trackbars that will allow to modify the parameters of the transformation
wndname1 = "Source:"
wndname2 = "WarpPerspective: "

# Show original image
cv2.imshow(wndname1, src)

k = -1
while k != 27:

    if f <= 0: f = 1
    rotX = (rotXval - 90) * np.pi / 180
    rotY = (rotYval - 90) * np.pi / 180
    rotZ = (rotZval - 90) * np.pi / 180
    distX = distXval - 500
    distY = distYval - 500
    distZ = distZval - 500

    # Camera intrinsic matrix
    K = np.array([[f, 0, w / 2, 0],
                  [0, f, h / 2, 0],
                  [0, 0, 1, 0]])

    # K inverse
    Kinv = np.zeros((4, 3))
    Kinv[:3, :3] = np.linalg.inv(K[:3, :3]) * f
    Kinv[-1, :] = [0, 0, 1]

    # Rotation matrices around the X,Y,Z axis
    RX = np.array([[1, 0, 0, 0],
                   [0, np.cos(rotX), -np.sin(rotX), 0],
                   [0, np.sin(rotX), np.cos(rotX), 0],
                   [0, 0, 0, 1]])

    RY = np.array([[np.cos(rotY), 0, np.sin(rotY), 0],
                   [0, 1, 0, 0],
                   [-np.sin(rotY), 0, np.cos(rotY), 0],
                   [0, 0, 0, 1]])

    RZ = np.array([[np.cos(rotZ), -np.sin(rotZ), 0, 0],
                   [np.sin(rotZ), np.cos(rotZ), 0, 0],
                   [0, 0, 1, 0],
                   [0, 0, 0, 1]])

    # Composed rotation matrix with (RX,RY,RZ)
    R = np.linalg.multi_dot([RX, RY, RZ])

    # Translation matrix
    T = np.array([[1, 0, 0, distX],
                  [0, 1, 0, distY],
                  [0, 0, 1, distZ],
                  [0, 0, 0, 1]])

    # Overall homography matrix
    H = np.linalg.multi_dot([K, R, T, Kinv])

    # Apply matrix transformation
    cv2.warpPerspective(src, H, (w, h), dst, cv2.INTER_NEAREST, cv2.BORDER_CONSTANT, 0)

    # Show the image
    cv2.imshow(wndname2, dst)

    k = cv2.waitKey(1)

    # Convert to Lab colourspace

    Lab = color.rgb2lab(dst)
    print(Lab)

    # Convert to Lab colourspace

''' cv2.namedWindow(wndname1, 1) cv2.namedWindow(wndname2, 1) cv2.createTrackbar("f", wndname2, f, 1000, onFchange) cv2.createTrackbar("Rotation X", wndname2, rotXval, 180, onRotXChange) cv2.createTrackbar("Rotation Y", wndname2, rotYval, 180, onRotYChange) cv2.createTrackbar("Rotation Z", wndname2, rotZval, 180, onRotZChange) cv2.createTrackbar("Distance X", wndname2, distXval, 1000, onDistXChange) cv2.createTrackbar("Distance Y", wndname2, distYval, 1000, onDistYChange) cv2.createTrackbar("Distance Z", wndname2, distZval, 1000, onDistZChange) '''

Now what I have tried to do here is to apply homography transformation on an RGB image and also tried to transform it to CIE-L*ab colour space. What I need is, to calculate the Euclidean distances among one pixel selected from the object of interest and the rest of the points in the image. This can be done by calculating the level of similarity among the pixels. We also need to compute the delta values of the image yielding only one chromatic difference on an image.

There are delta values associated with this colour scale.ΔL, Δa andΔb indicate how much a standard and simple difference from one another in L, a, and b, respectively. Please help.

determining chromatic components from an image in CIE-Lab space to compute euclidian distance.

Here is the following code that I have.

--
# -*- coding: utf-8 --

-*- """ Created on Sun Feb 9 00:09:31 2020

2020 @author: Shrouti """

""" import cv2 import numpy as np from PIL import Image, ImageCms from skimage import color

color f = 500 rotXval = 90 rotYval = 90 rotZval = 90 distXval = 500 distYval = 500 distZval = 500

500 def onFchange(val): global f f = val

val def onRotXChange(val): global rotXval rotXval = val

val def onRotYChange(val): global rotYval rotYval = val

val def onRotZChange(val): global rotZval rotZval = val

val def onDistXChange(val): global distXval distXval = val

val def onDistYChange(val): global distYval distYval = val

val def onDistZChange(val): global distZval distZval = val

val if __name__ == '__main__':

'__main__':
# Read input image, and create output image
 src = cv2.imread("D:\SHROUTI\Testpictures\handgesture2.png")
 src = cv2.resize(src, (640, 480))
 dst = np.zeros_like(src)
 h, w = src.shape[:2]
 # Create user interface with trackbars that will allow to modify the parameters of the transformation
 wndname1 = "Source:"
 wndname2 = "WarpPerspective: "
 # Show original image
 cv2.imshow(wndname1, src)
 k = -1
 while k != 27:
  if f <= 0: f = 1
  rotX = (rotXval - 90) * np.pi / 180
 rotY = (rotYval - 90) * np.pi / 180
 rotZ = (rotZval - 90) * np.pi / 180
 distX = distXval - 500
 distY = distYval - 500
 distZ = distZval - 500
  # Camera intrinsic matrix
 K = np.array([[f, 0, w / 2, 0],
  [0, f, h / 2, 0],
 [0, 0, 1, 0]])
  # K inverse
 Kinv = np.zeros((4, 3))
  Kinv[:3, :3] = np.linalg.inv(K[:3, :3]) * f
 Kinv[-1, :] = [0, 0, 1]
  # Rotation matrices around the X,Y,Z axis
 RX = np.array([[1, 0, 0, 0],
  [0, np.cos(rotX), -np.sin(rotX), 0],
 [0, np.sin(rotX), np.cos(rotX), 0],
 [0, 0, 0, 1]])
  RY = np.array([[np.cos(rotY), 0, np.sin(rotY), 0],
 [0, 1, 0, 0],
 [-np.sin(rotY), 0, np.cos(rotY), 0],
 [0, 0, 0, 1]])
  RZ = np.array([[np.cos(rotZ), -np.sin(rotZ), 0, 0],
 [np.sin(rotZ), np.cos(rotZ), 0, 0],
 [0, 0, 1, 0],
 [0, 0, 0, 1]])
  # Composed rotation matrix with (RX,RY,RZ)
 R = np.linalg.multi_dot([RX, RY, RZ])
 # Translation matrix
 T = np.array([[1, 0, 0, distX],
  [0, 1, 0, distY],
 [0, 0, 1, distZ],
 [0, 0, 0, 1]])
  # Overall homography matrix
 H = np.linalg.multi_dot([K, R, T, Kinv])
 # Apply matrix transformation
  cv2.warpPerspective(src, H, (w, h), dst, cv2.INTER_NEAREST, cv2.BORDER_CONSTANT, 0)
 # Show the image
 cv2.imshow(wndname2, dst)
 k = cv2.waitKey(1)
  # Convert to Lab colourspace
 Lab = color.rgb2lab(dst)
 print(Lab)
  # Convert to Lab colourspace

''' cv2.namedWindow(wndname1, 1) cv2.namedWindow(wndname2, 1) cv2.createTrackbar("f", wndname2, f, 1000, onFchange) cv2.createTrackbar("Rotation X", wndname2, rotXval, 180, onRotXChange) cv2.createTrackbar("Rotation Y", wndname2, rotYval, 180, onRotYChange) cv2.createTrackbar("Rotation Z", wndname2, rotZval, 180, onRotZChange) cv2.createTrackbar("Distance X", wndname2, distXval, 1000, onDistXChange) cv2.createTrackbar("Distance Y", wndname2, distYval, 1000, onDistYChange) cv2.createTrackbar("Distance Z", wndname2, distZval, 1000, onDistZChange) '''

Now what I have tried to do here is to apply homography transformation on an RGB image and also tried to transform it to CIE-L*ab colour space. What I need is, to calculate the Euclidean distances among one pixel selected from the object of interest and the rest of the points in the image. This can be done by calculating the level of similarity among the pixels. We also need to compute the delta values of the image yielding only one chromatic difference on an image.

There are delta values associated with this colour scale.ΔL, Δa andΔb indicate how much a standard and simple difference from one another in L, a, and b, respectively. Please help.