对于以下所示图像,某些区域的亮度不同。例如,我用红色圆圈标记了两个区域,即3和4;并使用箭头指向两个小区域,即1和2。可以根据各自的亮度级别对区域进行分割的图像处理算法是什么?我还想计算这些不同区域的面积。
答案 0 :(得分:0)
您只能在图像区域上使用Otsu阈值。 首先,通过阈值化只能获得图像的前景(无黑色背景)。然后,您可以使用Otsu alogrithm计算非零值的阈值。然后使用该值对图像进行阈值处理。
src = cv.imread(image_path)
#convert to gray scale
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
#thresholding to find only white region of image, without black backgorund
ret3, th3 = cv.threshold(gray, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
#erosion to delet some noises
cv.erode(th3, np.ones((5, 5), np.uint8), 1)
#get all values from image that are not equal 0 (are not background)
tempThresImg = gray[th3 != 0]
#get threshold value only for not black pixels
threshold, temp = cv.threshold(tempThresImg, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU) # using otsu threshold
#use threshold value on whole image
ret, thresh = cv.threshold(gray, threshold, 255, cv.THRESH_BINARY)
我的结果(带有您的箭头)
您可以更改阈值以获得结果,具体取决于算法检测到的是太多还是太少。