import cv2
1. Image Transform
This work tried to transform images from one color-space to another. The transformation you can see below:
- mask
- segment
- deskew
- gray
- thresh
- rnoise
- canny
- sharpen
According to [2] while the color image can be treated arbitrary vector value functions or collections of independent bands, it usually makes sense to think about them as highly correlated signals with strong connections to the image formation process, sensor design, and Human perception. Consider example brightening picture by adding a constant value to all three channels. In fact, adding the same value to each color channel not only increases the apparent intensity of each pixel, but it cal also affects the picture hue and saturation.
In [7]:
link code
#masking function
def create_mask_for_image(image):
image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower_hsv = np.array([0,0,250])
upper_hsv = np.array([250,255,255])
mask = cv2.inRange(image_hsv, lower_hsv, upper_hsv)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (11,11))
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
return mask
#image deskew function
def deskew_image(image):
mask = create_mask_for_image(image)
output = cv2.bitwise_and(image, image, mask = mask)
return output/255
#image gray function
def gray_image(image):
mask = create_mask_for_image(image)
output = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
return output/255
#image thresh function
def thresh_image(image):
img = read_img(df['file'][250],(255,255))
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
output = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV) #+cv.THRESH_OTSU)
return output
#image rnoise function
def rnoise_image(image):
mask = create_mask_for_image(image)
output = cv2.bitwise_and(image, image, mask = mask)
return output/255
#image dilate function
def dilate_image(image):
mask = create_mask_for_image(image)
output = cv2.bitwise_and(image, image, mask = mask)
return output/255
#image erode function
def erode_image(image):
mask = create_mask_for_image(image)
output = cv2.bitwise_and(image, image, mask = mask)
return output/255
#image opening function
def opening_image(image):
mask = create_mask_for_image(image)
output = cv2.bitwise_and(image, image, mask = mask)
return output/255
#image canny function
def canny_image(image):
mask = create_mask_for_image(image)
output = cv2.bitwise_and(image, image, mask = mask)
return output/255
#image segmentation function
def segment_image(image):
mask = create_mask_for_image(image)
output = cv2.bitwise_and(image, image, mask = mask)
return output/255
#sharpen the image
def sharpen_image(image):
image_blurred = cv2.GaussianBlur(image, (0, 0), 3)
image_sharp = cv2.addWeighted(image, 1.5, image_blurred, -0.5, 0)
return image_sharp
# function to get an image
def read_img(filepath, size):
img = image.load_img(os.path.join(data_kaggle, filepath), target_size=size)
#convert image to array
img = image.img_to_array(img)
return img</pre>
SHOW SAMPLE IMAGES
nb_rows = 3
nb_cols = 5
fig, axs = plt.subplots(nb_rows, nb_cols, figsize=(10, 5)); #打印成3行5列
plt.suptitle('SAMPLE IMAGES');
for i in range(0, nb_rows):
for j in range(0, nb_cols):
axs[i, j].xaxis.set_ticklabels([]);
axs[i, j].yaxis.set_ticklabels([]);
axs[i, j].imshow((read_img(df['file'][np.random.randint(400)], (255,255)))/255.);
plt.show();
打印一行两列
#get an image
img = read_img(df['file'][12],(255,255))
#mask
image_mask = create_mask_for_image(img)
fig, ax = plt.subplots(1, 2, figsize=(5, 5));
plt.suptitle('RESULT', x=0.5, y=0.8)
plt.tight_layout(1)
ax[0].set_title('ORIGINAL', fontsize=12)
ax[1].set_title('MASK', fontsize=12)
ax[0].imshow(img/255);
ax[1].imshow(image_mask);
原文
https://www.kaggle.com/code/khotijahs1/cv-image-preprocessing
https://www.kaggle.com/code/jamesmcguigan/image-preprocessing
网友评论