n_bins = int(lbp.max() + 1) hist, _ = np.histogram(lbp, density=True, bins=n_bins, range=(0, n_bins)) for name, ref in refs.items(): ref_hist, _ = np.histogram(ref, density=True, bins=n_bins, range=(0, n_bins)) score = kullback_leibler_divergence(hist, ref_hist) if score < best_score: best_score = score best_name = name return best_name brick = data.brick() grass = data.grass() gravel = data.gravel() refs = { 'brick': local_binary_pattern(brick, n_points, radius, METHOD), 'grass': local_binary_pattern(grass, n_points, radius, METHOD), 'gravel': local_binary_pattern(gravel, n_points, radius, METHOD) } # classify rotated textures print('Rotated images matched against references using LBP:') print('original: brick, rotated: 30deg, match result: ', match(refs, rotate(brick, angle=30, resize=False))) print('original: brick, rotated: 70deg, match result: ', match(refs, rotate(brick, angle=70, resize=False))) print('original: grass, rotated: 145deg, match result: ',
# prepare filter bank kernels kernels = [] for theta in range(4): theta = theta / 4. * np.pi for sigma in (1, 3): for frequency in (0.05, 0.25): kernel = np.real(gabor_kernel(frequency, theta=theta, sigma_x=sigma, sigma_y=sigma)) kernels.append(kernel) shrink = (slice(0, None, 3), slice(0, None, 3)) brick = img_as_float(data.brick())[shrink] grass = img_as_float(data.grass())[shrink] gravel = img_as_float(data.gravel())[shrink] image_names = ('brick', 'grass', 'gravel') images = (brick, grass, gravel) # prepare reference features ref_feats = np.zeros((3, len(kernels), 2), dtype=np.double) ref_feats[0, :, :] = compute_feats(brick, kernels) ref_feats[1, :, :] = compute_feats(grass, kernels) ref_feats[2, :, :] = compute_feats(gravel, kernels) print('Rotated images matched against references using Gabor filter banks:') print('original: brick, rotated: 30deg, match result: ', end='') feats = compute_feats(ndi.rotate(brick, angle=190, reshape=False), kernels) print(image_names[match(feats, ref_feats)])
# ● # Notice: beware of how the threshold is defined in the formulas of the previous slides. Your output # should be compliant with our definition of threshold (first slide). # https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html#otsus-binarization import numpy as np import cv2 as cv2 from skimage import data, io import matplotlib.pyplot as plt from sklearn import preprocessing from skimage.transform import resize import random # try page() im = data.grass() # h 400 * w 600 * c 3 if len(im.shape) == 3: # converting to gray scale if image is RGB im = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY) # h 400 * w 600 fig = plt.figure(figsize=(30, 30)) rows = 3 # grid 3x3 columns = 3 fig.add_subplot(rows, columns, 1) plt.imshow(im, cmap="gray") im = resize( im, (im.shape[0] // 2, im.shape[1] // 2), mode="reflect", preserve_range=True,