识别图像区域 python

Identify region of image python

我有一个microscopy image,需要计算红色区域。这个想法是建立一个函数,returns 右图红线内的区域(浮点值,X mm²)。

由于我几乎没有图像处理方面的经验,我不知道如何解决这个(也许很愚蠢)的问题,所以我正在寻求帮助。其他图像示例非常相似,只有靠近中心的 1 个聚集的“兴趣区域”。

我在 python 中编码很舒服,并且使用 ImageJ 软件有一段时间了。

任何 python 软件包、软件、参考书目等都应该有所帮助。

谢谢!

编辑: 我手动制作的红色示例只是为了让人们理解我想要什么。检测“感兴趣区域”必须在代码内部完成。

我对这个话题了解不多,但这似乎是一个与这个问题非常相似的问题,这个问题看起来有两个很好的答案:

Python: calculate an area within an irregular contour line

Canny,形态变换和轮廓可以提供不错的结果。

尽管它可能需要根据输入图像进行一些微调。

import numpy as np
import cv2 


# Change this with your filename
image = cv2.imread('test.png', cv2.IMREAD_GRAYSCALE)

# You can fine-tune this, or try with simple threshold
canny = cv2.Canny(image, 50, 580)  

# Morphological Transformations
se = np.ones((7,7), dtype='uint8')
image_close = cv2.morphologyEx(canny, cv2.MORPH_CLOSE, se)

contours, _ = cv2.findContours(image_close, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

# Create black canvas to draw area on
mask = np.zeros(image.shape[:2], np.uint8)

biggest_contour = max(contours, key = cv2.contourArea)
cv2.drawContours(mask, biggest_contour, -1, 255, -1)

area = cv2.contourArea(biggest_contour)

print(f"Total area image: {image.shape[0] * image.shape[1]} pixels")
print(f"Total area contour: {area} pixels")

cv2.imwrite('mask.png', mask)
cv2.imshow('img', mask)
cv2.waitKey(0)

# Draw the contour on the original image for demonstration purposes
original = cv2.imread('test.png')
cv2.drawContours(original, biggest_contour, -1, (0, 0, 255), -1)
cv2.imwrite('result.png', original)
cv2.imshow('result', original)
cv2.waitKey(0)

代码产生以下输出:

Total area image: 332628 pixels
Total area contour: 85894.5 pixels

剩下要做的就是将像素转换为您喜欢的测量值。

下面两张图片用于演示。

Result

Mask