【问题标题】:Detection and segmentation of region of interest from X-ray images从 X 射线图像中检测和分割感兴趣区域
【发布时间】:2020-11-10 19:04:07
【问题描述】:

我正在处理一些 X 射线图像,我想从图像中检测和分割感兴趣的区域。

考虑输入图像

我想检测图像中类似正方形的形状,如图像中突出显示的那样

输出:感兴趣的区域会以某种方式看起来像这样

这是我到目前为止所做的代码

import cv2
import numpy as np
import pandas as pd
import os
from PIL import Image
import matplotlib.pyplot as plt 
from skimage.io import imread, imshow


img = cv2.imread('image.jpg',0)
imshow(img)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imshow(gray)

equ = cv2.equalizeHist(img)
imshow(equ)


img_resize = cv2.resize(img, (300, 300))
print(img_resize.shape)
figure_size = 9

new_image_gauss = cv2.GaussianBlur(img_resize, (figure_size, figure_size),0)
imshow(new_image_gauss)


img_edge = cv2.Canny(equ,100,200)

# show the image edges on the newly created image window
imshow(img_edge)


kernel = np.ones((5,5), np.uint8) 
img_erosion = cv2.erode(img_edge, kernel, iterations=1) 
img_dilation = cv2.dilate(img_edge, kernel, iterations=1) 
   
imshow(img_erosion) 

我得到的结果;

请指导我。

TIA

【问题讨论】:

  • 在 Stack Overflow 上,您需要生成自己编写的代码以评估其行为(“为什么这段代码不能正确识别正方形?”)。就目前而言,恐怕这个问题不适合 Stack Overflow。
  • 我分享了我到目前为止所做的工作

标签: python opencv image-processing computer-vision


【解决方案1】:

在进行 Canny 边缘检测之前,对图像进行形态梯度以强调 Python OpenCV 中的边缘可能会有所帮助。

输入:

import cv2
import numpy as np

# read image
img = cv2.imread("xray2.jpg")

# convert img to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# do morphology gradient
kernel = cv2.getStructuringElement(cv2.MORPH_RECT , (3,3))
morph = cv2.morphologyEx(gray, cv2.MORPH_GRADIENT, kernel)

# apply gain
morph = cv2.multiply(morph, 5)

# write results
cv2.imwrite("xray2_gradient_edges.jpg",morph)

# show lines
cv2.imshow("morph", morph)
cv2.waitKey(0)

【讨论】:

  • 感谢分享技巧。正如你提到的,我应用了形态梯度,之后我使用了边缘检测器,但没有得到很好的结果
猜你喜欢
  • 2014-03-23
  • 1970-01-01
  • 2018-01-15
  • 2012-03-08
  • 2014-05-20
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多