我想使用python对图像执行几何变换,以"拉直"或纠正沿给定曲线的图像.看来,scikit形象ProjectiveTransform()和warp()对于这个非常好,但文档是稀疏.我按照这里的文档,但我无法让它适用于示例案例.
这是一个例子:我将创建一个带有两个同心圆的图像,目标是纠正这些圆的四分之一,这样得到的图像就是两条平行线.以下是示例数据:
import numpy as np
a = np.zeros((500, 500))
# create two concentric circles with a thickness of a few pixels:
for i in range(500):
for j in range(500):
r = np.sqrt((i - 250)**2 + (j - 250)**2)
if r > 50 and r < 52:
a[i, j] = 10
if r > 100 and r < 102:
a[i, j] = 10
# now create the coordinates of the control points in the …Run Code Online (Sandbox Code Playgroud) 我的一位朋友正在研究以下项目:
下面是不锈钢表面的微观(SEM)图像.

但你可以看到,它被腐蚀了一点(长时间暴露在海洋环境中)并且在表面形成了一些凹坑.一些坑被标记为红色圆圈.
他需要在图像中找到凹坑数量并且他手动计算它(想象一下,有近150张图像).所以我想到用任何图像处理工具自动化这个过程.
题:
如何在此图像中找到凹坑数?
我尝试了什么:
作为第一步,我通过关闭操作稍微改善了对比度.
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('6.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11))
close = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
close2 = cv2.add(close,1)
div = (np.float32(gray)+1)/(close2)
div2 = cv2.normalize(div,None, 0,255, cv2.NORM_MINMAX)
div3 = np.uint8(div2)
Run Code Online (Sandbox Code Playgroud)
结果:

然后我为127应用了一些阈值并在其中找到轮廓.之后这些轮廓根据它们的面积进行过滤(没有关于该区域的具体信息,我将1-10的范围作为经验值).
ret, thresh = cv2.threshold(div3, 127,255, cv2.THRESH_BINARY_INV)
temp, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
res = np.zeros(gray.shape,np.uint8)
for cnt in contours:
if 1.0 < cv2.contourArea(cnt) < 10.0:
res = cv2.drawContours(res, …Run Code Online (Sandbox Code Playgroud) 在大图像中测试物体检测算法时,我们根据为地面实况矩形给出的坐标检查我们检测到的边界框.
根据Pascal VOC挑战,有这样的:
如果预测的边界框与地面实况边界框重叠超过50%,则认为该边界框是正确的,否则边界框被认为是误报检测.多次检测会受到处罚.如果系统预测了几个与单个地面实况边界框重叠的边界框,则只有一个预测被认为是正确的,其他预测被认为是误报.
这意味着我们需要计算重叠的百分比.这是否意味着地面实况框被检测到的边界框覆盖了50%?或者50%的边界框被地面真值箱吸收了?
我已经搜索了但是我没有为此找到一个标准算法 - 这是令人惊讶的,因为我会认为这是计算机视觉中非常常见的东西.(我是新手).我错过了吗?有谁知道这类问题的标准算法是什么?
python bounding-box object-detection computer-vision scikit-image
我非常擅长skimage使用Python中的scikit-image()库进行图像处理(几分钟前开始!).我以前imread读过一个图像文件numpy.ndarray.该阵列是3维的,其中第三维的尺寸是3(即,对于图像的红色,绿色和蓝色分量中的每一个,一个).
rgb_image = imread("input_rgb_image.jpg")
rgb_image.shape # gives (1411L, 1411L, 3L)
Run Code Online (Sandbox Code Playgroud)
我试图将绿色通道提取为:
green_image = rgb_image[:,:,1]
Run Code Online (Sandbox Code Playgroud)
但是当我将这个图像矩阵写入输出文件时:
imsave("green_output_image.jpg",green_image)
Run Code Online (Sandbox Code Playgroud)
我得到的图像看起来并不真实!
运行时:
from skimage import data
Run Code Online (Sandbox Code Playgroud)
在 jupyter notebook 中,我总是收到错误消息:“内核似乎已经死了。它将自动重新启动”
我使用:Anaconda 4.2.0(64 位)Python 3.5.2 scikit-image 0.12.3 np111py35_1
当我使用 python 2.7 内核运行笔记本时,它运行良好,没有错误。
所以我猜是兼容性问题?但是我需要使用 python 3.5,有什么建议吗?
我正在进行牌照识别.我已经裁掉了盘子,但它非常模糊.因此,我无法拆分数字/字符并识别它.
这是我的形象:
我试图通过使用scikit图像功能去噪它.
首先,导入库:
import cv2
from skimage import restoration
from skimage.filters import threshold_otsu, rank
from skimage.morphology import closing, square, disk
Run Code Online (Sandbox Code Playgroud)
然后,我读取图像并将其转换为灰度
image = cv2.imread("plate.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Run Code Online (Sandbox Code Playgroud)
我试着消除噪音:
denoise = restoration.denoise_tv_chambolle(image , weight=0.1)
thresh = threshold_otsu(denoise)
bw = closing(denoise > thresh, square(2))
Run Code Online (Sandbox Code Playgroud)
我得到的是:
如您所见,所有数字都混合在一起.因此,我无法将它们分开并逐一识别这些角色.
我期待的是这样的(我画它):
我正在寻求帮助,我怎样才能更好地过滤图像?谢谢.
================================================== =================== 更新:
使用后skimage.morphology.erosion,我得到:
我一直在使用scikit-image对道路功能进行分类并获得一些成功.见下文:
.我无法进行下一步,即对功能进行分类.例如,假设这些特征位于框(600,800)和(1400,600)中.
我用来提取信息的代码是:
from skimage import io, segmentation as seg
color_image = io.imread(img)
plt.rcParams['image.cmap'] = 'spectral'
labels = seg.slic(color_image, n_segments=6, compactness=4)
Run Code Online (Sandbox Code Playgroud)
目标是以下列形式提供表格:
Image, feature_type, starting_pixel, ending_pixel
001 a (600, 600), (1300, 700)
002 b (600, 600), (1100, 700)
002 undefined (700, 700), (900, 800)
Run Code Online (Sandbox Code Playgroud)
feature_type 将基于颜色,理想情况下肩膀将是一种颜色,树木和刷子将是另一种颜色,等等.
如何提取我需要的数据?(即:scikit将图像分成不同的组件,我知道每个组件的位置.然后我可以将每个组件传递给分类器,分类器将识别每个组件是什么)谢谢!
python machine-learning computer-vision scikit-learn scikit-image
我正在尝试为scikit-image 提交PR,但我收到Travis-CI 错误:
Traceback (most recent call last):
File "doc/examples/edges/plot_canny.py", line 22, in <module>
from skimage import feature
File "/home/travis/build/scikit-image/scikit-image/skimage/feature/__init__.py", line 9, in <module>
from .peak import peak_local_max
File "/home/travis/build/scikit-image/scikit-image/skimage/feature/peak.py", line 3, in <module>
from ..filters import rank_order
File "/home/travis/build/scikit-image/scikit-image/skimage/filters/__init__.py", line 11, in <module>
from ._frangi import frangi_filter, hessian_filter
File "/home/travis/build/scikit-image/scikit-image/skimage/filters/_frangi.py", line 2, in <module>
from skimage.feature import hessian_matrix, hessian_matrix_eigvals
ImportError: cannot import name hessian_matrix
Run Code Online (Sandbox Code Playgroud)
我想这可能是一个循环导入错误,但我不知道如何解决这个问题.我已经包含 frangi_filter并 hessian_filter进入过滤器的模块__init__.py.
嗨,我正在尝试在 ubuntu 18.04 的虚拟环境中安装 scikit 映像。
它在尝试安装 imagecodecs 时失败,我尝试单独安装 imagecodecs,但它给出了相同的错误,这是由于 blosc 引起的。我单独安装了 blosc,但不知何故这仍然失败。
/usr/include/python3.6m/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
#warning "Using deprecated NumPy API, disable it by " \
^~~~~~~
imagecodecs/_blosc.c:602:10: fatal error: blosc.h: No such file or directory
#include "blosc.h"
^~~~~~~~~
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
----------------------------------------
Command "/home/xxxx/im_an/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-ijwkwo7f/imagecodecs/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-4xtori6c-record/install-record.txt --single-version-externally-managed --compile --install-headers …Run Code Online (Sandbox Code Playgroud) 我知道如何使用 OpenCV 和 PIL 来做到这一点。我不能在这个项目中使用 OpenCV,如果我使用 PIL,我必须在图像 PIL Image 和 numpy 数组之间进行转换。我不想那样做。我已经在使用 skimage 所以...
如何使用 skimage 在图像上写入文本?
我看过 skimage 绘制函数,但它们似乎只处理形状和线条而不处理文本。也许我正在搜索错误的单词,但我在文档中没有看到任何内容。
scikit-image ×10
python ×8
image ×2
opencv ×2
anaconda ×1
bounding-box ×1
imread ×1
installation ×1
matlab ×1
numpy ×1
python-3.x ×1
scikit-learn ×1