我目前在一个项目中,我必须使用红外图像和实时捕获来制作静脉探测器。应用CLAHE之后,图像上(红框内)有一些“波动”,首先我不知道会是什么,但是在与我的老师交谈之后,问题可能出在图像上的黑色量可能会导致饱和在图像中,因此是波浪。但是我们不知道如何消除这些波动。
我尝试了更大的投资回报率,这很有帮助,但只是减少了波浪,然后我尝试了较小的投资回报率,只是为了捕捉手臂部分以查看静脉,但没有任何效果。我认为网络摄像头也可能是问题的一部分,我使用的是Genius Facecam 1000HD,但我不知道它是否真的可以影响海浪。
我希望您能为我解决这个问题,我尝试了很多事情,但没有办法完全解决问题。
import matplotlib.pyplot as plt
import matplotlib.image as img
import numpy as np
import cv2
kernel = np.ones((3,3),np.uint8)
kernel[0,0]=0
kernel[0,2]=0
kernel[2,0]=0
kernel[2,2]=0
print(kernel)
#-----Reading the image-----------------------------------------------------
camera = cv2.VideoCapture(1)
while cv2.waitKey(1)==-1:
retval, img = camera.read()
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('byn',gray)
retval,mask = cv2.threshold(final,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
gray = cv2.bitwise_and(final,final,mask = mask)
##-----PROCESAMIENTO-----------------------------------
#Def. ROI
nf,nc=gray.shape
CAP1 = gray.copy() #con ROI
#Ecualización
clahe = cv2.createCLAHE(clipLimit=20.0, tileGridSize=(8,8))
gray= clahe.apply(gray)
CAP2 = gray.copy()
gray = cv2.medianBlur(gray,3) #Filtro Mediana
CAP3 = gray.copy()
cv2.imshow('BLUR',CAP3)
retval,CAP4 = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
mask1=(CAP4>0)*gray #pixeles grises
mask2=(CAP4==0)*int(CAP3.mean()+40) #Fondo Promedio
gray=np.uint8(mask1+mask2) #conviente a formato int
CAP5 = gray.copy()
retval,gray = cv2.threshold(gray,120,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
gray = (CAP1>0)*gray
CAP6 = gray.copy()
gray = cv2.erode(gray,kernel,iterations = 2)
gray = cv2.morphologyEx(gray, cv2.MORPH_OPEN, kernel)
CAP7 = gray.copy()
cv2.imshow('PROMEDIO',CAP5)
cv2.imshow('CLAHE',CAP7)
cv2.destroyAllWindows()
camera.release()