设置阈值,大于T为梯度,否则不变。即:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
def gradient_T(img, T):
result = np.array(img)
for i in range(img.shape[0]-1):
for j in range(img.shape[1]-1):
g = np.abs(int(img[i][j]) - int(img[i+1][j])) + np.abs(int(img[i][j]) - int(img[i][j+1]))
if img[i][j] > T:
result[i][j] = g
return result
img = cv.imread('lena512color.tiff', 0)
result1 = gradient_T(img, 20)
result2 = gradient_T(img, 80)
result3 = gradient_T(img, 150)
res1 = np.hstack((img, result1))
res2 = np.hstack((result2, result3))
cv.imshow('img and result1', res1)
cv.imshow('result2 and result3', res2)
cv.waitKey(0)
第一张是原图,第二张是T=20时的梯度图像,第三张是T=80时的梯度图像,最后一张是T=150时的梯度图像,由图可以看出,当阈值越大,轮廓越不明显。
为边缘处为一个特定的灰度级。即
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
def gradient_T(img, T):
result = np.array(img)
for i in range(img.shape[0]-1):
for j in range(img.shape[1]-1):
g = np.abs(int(img[i][j]) - int(img[i+1][j])) + np.abs(int(img[i][j]) - int(img[i][j+1]))
if g > T:
result[i][j] = 80
return result
img = cv.imread('lena512color.tiff', 0)
result1 = gradient_T(img, 20)
res1 = np.hstack((img, result1))
cv.imshow('img and result1', res1)
cv.waitKey(0)