识别图像区域 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
我有一个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