Я пытаюсь применить фильтры cv2, некоторые работают, но другие нет, так как они говорят, что должны использовать uint8, но изображения dicom теряют информацию, если я их преобразую.
Следующий код работает, если вы изменитеto uint8 Я попытался сделать то же самое с float, но он не работает
import matplotlib.pyplot as plt
import matplotlib.image as img
import numpy as np
import cv2
import pydicom #read dicom files
from PIL import Image, ImageFilter
A=pydicom.read_file('prueba.dcm')
imag=A.pixel_array
#img=np.float32(imag)
img= cv2.medianBlur(img,13).astype('uint16')
roi = img[1200:1500,650:1000]
hist = cv2.calcHist([roi],[0],None,[4095],[70,4095])
ret1,th1 = cv2.threshold(roi,1800,4095,cv2.THRESH_BINARY)
# Otsu's thresholding
ret2,th2 = cv2.threshold(roi,0,4095,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
# Otsu's thresholding after Gaussian filtering
blur = cv2.GaussianBlur(roi,(5,5),0)
ret3,th3 = cv2.threshold(blur,0,4095,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
# plot all the images and their histograms
images = [roi, 0, th1,
roi, 0, th2,
blur, 0, th3]
titles = ['Original Noisy Image','Histogram','Global Thresholding (v=127)',
'Original Noisy Image','Histogram',"Otsu's Thresholding",
'Gaussian filtered Image','Histogram',"Otsu's Thresholding"]
for i in range(3):
plt.subplot(3,3,i*3+1),plt.imshow(images[i*3],'gray')
plt.title(titles[i*3]), plt.xticks([]), plt.yticks([])
plt.subplot(3,3,i*3+2),plt.hist(images[i*3].ravel(),256)
plt.title(titles[i*3+1]), plt.xticks([]), plt.yticks([])
plt.subplot(3,3,i*3+3),plt.imshow(images[i*3+2],'gray')
plt.title(titles[i*3+2]), plt.xticks([]), plt.yticks([])
plt.show()`
ошибка: (-215: утверждение не выполнено) src.type () == CV_8UC1 в функции 'cv :: threshold'