小编Sag*_*gRU的帖子

如何检测连接图像上元素的角“关节”?

我通过 Python 3.7 使用 OpenCV。我有一组单色图像,如下所示:

在此输入图像描述

我想找到这些图像上的所有“关节点”,其中“关节点”是两块木板每个交叉点的中心(1 像素)。这些“关节”大致由下图中的红色圆圈表示:

在此输入图像描述

第一个想法是对图像进行骨架化,然后通过算法找到所有连接的边缘,但所有骨架化技术都给了我摆动或圆角和额外的“芽”。

import cv2
import numpy as np
from skimage.morphology import skeletonize

image = cv2.imread("SOURCE_IMAGE.jpg", cv2.IMREAD_GRAYSCALE)
binary_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 91, 12)
skeleton = (skeletonize(binary_image//255) * 255).astype(np.uint8)
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

第二个想法是找到内部轮廓,将它们近似为边界点,找到最近的邻居,然后以某种方式计算中心,但是,再一次,Canny 边缘检测方法给了我摆动的角和额外的点。

import cv2

image = cv2.imread("SOURCE_IMAGE.jpg", cv2.IMREAD_GRAYSCALE)
edged = cv2.Canny(image, 100, 200)
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

有没有可靠的方法来解决这个问题?

python opencv image image-processing python-3.x

5
推荐指数
2
解决办法
1855
查看次数

如何消除图像中的显示器闪烁噪声?

我正在尝试消除监视器屏幕照片中的噪音。这是源照片:

在此输入图像描述

我尝试了一些不同的方法,所以我的代码的当前版本如下:

clr_img = cv2.imread("D:\Noisy.jpg", 1) 
gray_img = cv2.cvtColor(clr_img, cv2.COLOR_BGR2GRAY) 
gray_img = cv2.fastNlMeansDenoising(gray_img, h=11)
binary_image = cv2.adaptiveThreshold(gray_img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 91, 12)
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述

有可能消除这种噪音吗?

python opencv image image-processing python-3.x

4
推荐指数
1
解决办法
888
查看次数

为什么即使批量大小为 1 也会出现内存分配错误?

我(仍在)尝试在 Tensorflow 2.0 后端使用 Keras 实现一个简单的 Unet 网络。

我的模板和蒙版是 1536x1536 RGB 图像(蒙版是黑白的)。根据这篇文章,可以测量所需的内存量。

我的模型因张量 [1,16,1536,1536] 上的内存分配错误而崩溃。使用上面文章中给出的方程,我计算了这个张量所需的内存量:1 * 16 * 1536 * 1536 * 4 = 144 MB。我有 GTX 1080 Ti,大约 9 GB 可用于 Tensorflow。怎么了?我错过了什么吗?

这是一个几乎完整的回溯:

2020-03-02 15:59:13.841967: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll
2020-03-02 15:59:16.083234: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
2020-03-02 15:59:16.087240: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2020-03-02 15:59:16.210856: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 …
Run Code Online (Sandbox Code Playgroud)

python machine-learning image-segmentation keras tensorflow

3
推荐指数
1
解决办法
4508
查看次数

如何为图像分割任务创建混淆矩阵?

我正在处理二值图像分割问题。我已经成功编译并训练了模型。现在我正在努力实现两个目标:

  1. 获取测试集的总混淆矩阵(原因:了解误报和漏报的比例)
  2. 为测试集中的每个图像获取单独的混淆矩阵(原因:查找并分析拖慢模型性能的图像)

据我了解,confusion_matrixscikit -learn包可以帮助创建一个完整的混淆矩阵,但我无法让它与我的自定义数据生成器一起使用。根据文档,这里有一个代码confusion_matrix

sklearn.metrics.confusion_matrix(y_true, y_pred, *, labels=None, sample_weight=None, normalize=None)
Run Code Online (Sandbox Code Playgroud)

我不明白如何y_true使用自定义数据生成器进行检索:

def learn_generator(templates_folder, masks_folder, image_width, batch_size, shuffle=True):
    """Generate individual batches form dataset"""
    counter = 0
    images_list = os.listdir(templates_folder)
    if shuffle:
        random.shuffle(images_list)
    while True:
        templates_pack = np.zeros((batch_size, image_width, image_width, 3)).astype('float')
        masks_pack = np.zeros((batch_size, image_width, image_width, 1)).astype('float')
        for i in range(counter, counter + batch_size):
            template = cv2.imread(templates_folder + '/' + images_list[i]) / 255.
            templates_pack[i - counter] = template
            mask = cv2.imread(masks_folder + '/' + …
Run Code Online (Sandbox Code Playgroud)

python image-segmentation keras

3
推荐指数
1
解决办法
7526
查看次数