我试图在执行二进制阈值后填充图像中红细胞的“孔”。当反转二进制阈值时,几乎所有红细胞都有一个黑色中心。我想删除它们。
示例图片:

这是我的代码:
import cv2
from PIL import Image
import numpy as np
from scipy import ndimage
from skimage.feature import peak_local_max
from skimage.morphology import watershed
image = cv2.imread("blood_cells.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
darker = cv2.equalizeHist(gray)
ret,thresh = cv2.threshold(darker,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
newimg = cv2.bitwise_not(thresh)
im2, contours, hierarchy = cv2.findContours(newimg,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
cv2.drawContours(newimg,[cnt],0,255,-1)
Run Code Online (Sandbox Code Playgroud)
它奏效了。findContours()我使用和填补了这些漏洞drawContours()。
但是当我尝试计算欧几里德距离时,为了应用分水岭算法,我只得到 52 个独特的段,但应该有更多。这是代码,如果有帮助的话:
D = ndimage.distance_transform_edt(newimg)
localMax = peak_local_max(D, indices=False, min_distance=20, labels=thresh)
markers = ndimage.label(localMax, structure=np.ones((3, 3)))[0]
labels = watershed(-D, markers, mask=thresh)
print("[INFO] {} …Run Code Online (Sandbox Code Playgroud) 这是我第一次使用支持向量机.我正在尝试解决这个功课,但是我收到了上面提到的错误...代码正在为线性内核和径向内核工作,但是对于多项式内核这里不是我的代码:
library(e1071)
test_data = #upload test data here.
training_data= read.table('Digits_training.csv', sep =',', header = TRUE)
y = training_data$y
chosen_svm = function(y,training_data,kernel_name){
obj <- tune.svm(y~., data = training_data, gamma = 10^(-3:1), cost = 10^(-3:1), kernel = kernel_name)
gamma = obj$best.parameters$gamma
cost = obj$best.parameters$cost
model = svm(y~., data = training_data, gamma = gamma, cost = cost, kernel = kernel_name)
return(model)
}
radial_svm = chosen_svm(y,training_data,'radial')
lin_svm = chosen_svm(y,training_data,'linear')
pol_svm = chosen_svm(y,training_data,'polynomial')
Run Code Online (Sandbox Code Playgroud)
我厌倦了稍微改变伽马和成本范围,并尝试使用二次多项式,但我仍然得到相同的错误信息.
知道为什么会这样吗?