working and learning

reading notes


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

在jupyter notebook里添加R kernel

发表于 2019-07-09 | 分类于 r | 阅读量: 次
字数统计: 38 字 | 阅读时长 ≈ 1 分钟

1、Installing via CRAN

系统环境:windows 7

install.packages('IRkernel')

2、 Making the kernel available to Jupyter

IRkernel::installspec()

IRkernel::installspec(user = FALSE)

参考文献:

<https://irkernel.github.io/installation/>

jupyter notebook修改默认启动目录

发表于 2019-07-02 | 分类于 python | 阅读量: 次
字数统计: 164 字 | 阅读时长 ≈ 1 分钟

​ 在windows系统中第一次使用Jupyter Notebook时,它默认打开windows的C盘目录,并以此作为它的默认工作目录。为避免后期开发Jupyter Notebook生成的相关文件消耗C盘存储空间,我们需要修改它的默认工作目录。

Jupyter Notebook 默认工作界面

生成配置文件

打开Anaconda Prompt,输入如下命令:

jupyter notebook --generate-config

修改配置文件

打开jupyter_notebook_config.py文件,全局搜索notebook_dir,并修改其内容,得到下图

修改JupyterNotebook快捷方式的目标属性

右击JupyterNotebook快捷方式,选择【属性】,删除【目标】属性中的【%USERPROFILE%】,点击【应用】–【确定】。

cv.goodFeaturesToTrack()函数

发表于 2019-05-15 | 分类于 opencv | 阅读量: 次
字数统计: 306 字 | 阅读时长 ≈ 1 分钟

cv.goodFeaturesToTrack()

与Harris Corner Detector 相比显示出更好的结果

corners = cv.goodFeaturesToTrack( image, maxCorners, qualityLevel, minDistance[, corners[, mask[, blockSize[, useHarrisDetector[, k]]]]] )

参数

  • image:输入8-bit或者浮点32位单通道图像

  • corners:检测到的角落的输出向量

  • maxCorners:要返回的最大角数。如果角落多于找到的角落,则返回最大的角落。maxCorners<=0意味着不设置最大值限制并返回所有检测到的角点

  • qualityLevel:表征图像角落的最小可接受质量。参数值乘以最佳拐角质量度量,即最小特征值或Harris函数响应。质量测量小于产品的角落被拒绝。例如,如果最佳角点的质量度量为2000,质量等级为0.01,则质量度量小于15的所有角落都被拒绝。
  • minDistance:返回角落的最小可能欧几里德距离
  • mask:可选的感兴趣区域。如果图像不为空(它需要类型为CV_8UC1冰盒输入图像一样的大小),则它指定检测的角区域
  • BLOCKSIZE:用于计算每个像素领域上的derivative covariation matrix 的平均块大小
  • useHarrisDetector:指示是否使用Harris检测器
  • k:Harris检测器的自由参数

cv.cornerHarris()函数

发表于 2019-05-14 | 分类于 opencv | 阅读量: 次
字数统计: 872 字 | 阅读时长 ≈ 3 分钟

哈里斯边角侦测

哈里斯边角侦测(Harris Corner Detector)是被广泛运用在电脑死机的演算法,主要是用于从影像中找出代表边角的特征点。

概要介绍

​ 角落的概念是它相邻的区域有两条截然不同方向的边,换句话说,角落也是两条边的连接点,而这条边的附近有剧烈的亮度变化。

​ 为了找出影响中的边角,科学家们提出了不同种的边角测试器包含Kanade-Lucas-Tomasi(KLT)算子,哈里斯算子是其中最简单,有效,及可信赖的方法。这两种受欢迎的方法均是以局部结构矩阵来当作基础,想较于Kanade-Lucas-Tomasi(KLT)边角侦测,就算是影响经过旋转或者是亮度的调整,哈里斯边角侦测具有良好的结果重现性。

函数

dst=cv.cornerHarris(src, blockSize, ksize, k[, dst[, borderType]])

参数

  • src:输入图像(应该是灰度和float32类型)
  • dst:存储Harris探测器响应的图像,类型为CV_32FC1,图像大小与src相同
  • blockSize:领域大小
  • ksize:Sobel算子的孔径参数
  • k:哈里斯探测器自由参数
  • borderType:像素外推法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import cv2
import numpy as np

filename = 'chessboard.png'
img = cv2.imread(filename)

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

gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)


# result is dilated for marking the corners, not important
dst = cv2.dilate(dst,None)

# Threshold for an optimal value, it may vary depending on the image
img[dst>0.01*dst.max()]=[0,0,255]

cv2.imshow('dst',img)
if cv2.waitKey(0) & Oxff == 27:
cv2.destroyAllWindows()

输入图片:

结果图(需要方大才看得清楚):

有时可能需要以最高精度找到角落。opencv附带了一个函数cv2.cornerSubPix(),它进一步以亚精度检测到的角点。该函数迭代以找到角点或径向鞍点的亚像素精度位置

1
corners	=	cv.cornerSubPix(	image, corners, winSize, zeroZone, criteria	)
  • image :输入单通道,8位或浮动图像
  • corners:输入角的初始坐标和为输出提供的精细坐标
  • winSize:搜索窗口边长的一半。例如,如果winSize=Size(5,5),$(52+1)(5*2+1)=11×11$的搜索窗搜索
  • zeroZone:Half of the size of the dead region in the middle of the search zone over which the summation in the formula below is not done.It is used sometimes to avoid possible singularities of the autocorrelation matrix.The value of (-1,-1) indicates that there is no such a size
  • criteria:终止角点细化迭代过程的标准。也就是说,角点位置细化的过程在criteria.maxCount迭代之后或在某个迭代是角位置移动小于criteria.epsilon时停止。
1
retval, labels, stats, centroids	=	cv.connectedComponentsWithStats(	image[, labels[, stats[, centroids[, connectivity[, ltype]]]]]	)
  • image:标记的8位单通道图像
  • labels:目标标记图像
  • stats:每个标签的统计输出,包括背景标签。
  • centroids:每个标签的质心,包括背景标签
  • ltype:输出图像的类型。一般为CV_32S、CV_16U类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import cv2
import numpy as np

filenname = 'chessboard.png'

img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)


# find Harris corners
gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)
dst = cv2.dilate(dst,None)
ret, dst = cv2.threshold(dst,0.01*dst.max(),255,0)
dst = np.uint8(dst)

# find centroids
ret, labels, stats, centroids = cv2.connectedComponentsWithStats(dst)

# define the criteria to stop and refine the corners
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001)
corners = cv2.cornerSubPix(gray,np.float32(centroids),(5,5),(-1,-1),criteria)

# Now draw them
res = np.hstack((centroids,corners))
res = np.int0(res)
img[res[:,1],res[:,0]]=[0,0,255]
img[res[:,3],res[:,2]]=[0,255,0]

cv2.imwrite('subpixe15.png',img)

参考网址:

https://docs.opencv.org/3.4.3/dd/d1a/group__imgproc__feature.html#ga354e0d7c86d0d9da75de9b9701a9a87e

https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_features_harris/py_features_harris.html

cv2.distanceTransform()

发表于 2019-05-11 | 分类于 opencv | 阅读量: 次
字数统计: 220 字 | 阅读时长 ≈ 1 分钟

cv2.distanceTransform()

计算源图像的每个像素到最临近零像素的距离

dst = cv2.distanceTransform(src,distanceType,makeSize[,dst[,dstType]])

参数

  • src:8位、单通道(二进制)源图像
  • DST:输出具有计算距离的图像。它是一个8位或32位浮点单通道图像,大小与src相同
  • distanceType:距离类型
类型 描述
cv2.DIST_USER 用户自定义距离
cv2.DIST_L1 distance=\ x1-x2\ +\ y1-y2\
cv2.DIST_L2 简单的欧几里德距离
cv2.DIST_C distance=max(\ x1-x2\ ,\ y1-y2\ )
cv2.DIST_L12 distance=2(sqrt(1+x*X/2)-1))
cv2.DIST_FAIR distance=c^2(\ x\ /c-log(1+\ x\ /c)),c=1.3998
cv2.DIST_WELSCH distance=c\^2/2(1-exp(-(x/c)^2)),c=2.
cv2.DIST_HUBER distance=\ x\ <c?x^2/2:c(\ x\ -c/2),c=1.345
  • makeSize:距离变换蒙版的大小。在cv2.DIST_L1或cv2.DIST_C距离类型的情况下,参数被强制为3。

参考网址:

https://docs.opencv.org/3.4.3/d7/d1b/group__imgproc__misc.html#ga8a0b7fdfcb7a13dde018988ba3a43042

cv2.morphologyEx()函数

发表于 2019-05-11 | 分类于 opencv | 阅读量: 次
字数统计: 218 字 | 阅读时长 ≈ 1 分钟

cv2.morphologyEx()函数

可以使用侵蚀和膨胀作为基本操作来执行高级形态学变换

dst=cv2.morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])

参数

  • src:源图片。通道数可以是任意的。
  • dst:与源图像大小和类型相同的目标图像
  • op:形态学操作的类型
模式 描述
cv.MORPH_ERODE 腐蚀
cv2.M0RPH_DILATE 扩张
cv2.MORPH_OPEN 一个开放的操作 dst=open(src,element)=dilate(erode(src,element))
cv2.MORPH_CLOSE 一个关闭的操作 dst=close(src,element)=erode(dilate(src,element))
cv2.MORPH_GRADIENT 一个形态梯度 dst=morph_grad(src,element) = dilate(src,element)-erode(src,element)
cv2.MORPH_TOPHAT “top hat” dst=tophat(src,element)=src-open(src,element)
cv2.MORPH_BLACKHAT “black hat” dst=blackhat(src,element)=close(src,element)-src
  • kernel: 结构元素
  • anchor:用kernel锚定位置。负值意味着anchor位于核心中心
  • iterations:侵蚀和扩张的次数
  • borderType:像素外推方法
  • borderValue:边界不变的边界值

cv.HoughCircles()函数

发表于 2019-05-11 | 分类于 opencv | 阅读量: 次
字数统计: 371 字 | 阅读时长 ≈ 1 分钟

cv.HoughCircles()函数

circles=cv.HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]])

  • image:8位、单通道、灰度输入图像
  • circles:找到圆的输出向量。每个向量编码为3或4个元素的浮点向量$(x,y,radius)(x,y,radius,votes)$
  • method:检测方法。目前,唯一实现的方法是HOUGH_GRADIENT
  • dp:累加器分辨率与图像分辨率的反比。例如,如果dp=1,则累加器具有与输入图像相同的分辨率。如果dp=2,则累加器的宽度和高度都是一半
  • minDist:检测到圆的中心之间的最小距离。如果参数太小,除了一个真实的圆之外,可能错误地检测到多个相邻的圆圈。如果太大,可能会遗漏一些圆。
  • param1:第一个特定方法参数。在HOUGH_GRADIENT的情况下,它是传递给canny边缘检测算子的高阀值,而低阀值为高阀值的一半
  • param2:第二个特定方法参数。在HOUGH_GRADIENT的情况下,它是检测阶段圆心的累加阀值。它越小,可以检测到更多的假圆。它越大,能通过检测的圆就更加接近完美的圆形。
  • minRadius:最小半径
  • maxRadius:最大圆半径。如果≤0,则使用最大图像尺寸;如果<0,则返回中心而不查找半径

参考网址:

https://blog.csdn.net/tengfei461807914/article/details/77507820

https://opencv-python-tutroals.readthedocs.io/en/stable/py_tutorials/py_imgproc/py_houghcircles/py_houghcircles.html

https://docs.opencv.org/3.4.3/dd/d1a/group__imgproc__feature.html#ga47849c3be0d0406ad3ca45db65a25d2d

cv2.HoughLinesp()

发表于 2019-05-09 | 分类于 opencv | 阅读量: 次
字数统计: 232 字 | 阅读时长 ≈ 1 分钟

参数详解

lines =cv.HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]] )

  • image:输入图像(必须为二值图像),推荐使用canny边缘检测的结果图像
  • rho:累加器的距离分辨率,以像素为单位
  • theta:累加器的角度分辨率,以弧度表示
  • threshold:累加器阀值参数,int类型,超过设定阈值才被检测出线段,值越大,基本上意味着检出的线段越长,检出的线段个数越少。
  • lines:这个参数的意义未知,发现不同的lines对结果没影响,但是不要忽略了它的存在
  • minLineLength:检测线段的最小长度
  • maxLineGap:同一方向上两条线段判定为一条线段的最大允许间隔(断裂),超过了设定值,则把两条线段当成一条线段,值越大,允许线段上的断裂越大,越有可能检出潜在的直线段

cv2.Canny()函数

发表于 2019-05-09 | 分类于 opencv | 阅读量: 次
字数统计: 241 字 | 阅读时长 ≈ 1 分钟

cv2.Canny()函数

cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]])

  • image:输入图像

  • threshold1: minVal

  • threshold:maxval

  • aperturesize :Sobel算子大小,默认为3

  • L2gradient:为一个布尔值。若为真则使用L2范数进行计算(即对两个方向导数的平方和进行开方),否则使用L1范数(直接将两个方向导数的绝对值相加)

    ​ 梯度强度大于maxval的任何边缘肯定为边缘,而minVal以下的边缘肯定为非边缘,非边缘被舍弃。位于这两个阈值之间的是基于其连通性的分类边缘或非边缘。如果它们连接到“可靠边缘”像素,则它们被视为边缘的一部分。否则,他们也被丢弃。见下图:

例子

1
2
3
4
5
6
import numpy as np
import cv2
img = cv2.imread('dave.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
cv2.imwrite('dave_canny.jpg',edges)

处理前图片如下图所示

处理后图片如下图所示

# cv2.calcHist()函数

发表于 2019-05-07 | 分类于 opencv | 阅读量: 次
字数统计: 187 字 | 阅读时长 ≈ 1 分钟

cv2.calcHist()函数

cv2.calcHist(images,channels,mask,histSize,ranges[,hist[,accumulate]])

  • images:必须用括号括起来表示,即[image]
  • chanels:用于计算直方图的通道,使用灰度图计算直方图,所以就直接使用第一个通道;对于彩色可以通过[0],[1],[2]分别计算蓝色、绿色或红色通道的直方图
  • mask:如果计算完整图像的直方图,它将设为None。但是如果想找到图像特定区域的直方图,则必须为它创建一个蒙版图像作为蒙版。
  • histSize:表示这个直方图分成多少份(即多少个直方柱)。对于满量程,设置为[256]
  • ranges:表示直方图中各个像素的值,通常设为[0,256]
123

Chenhaha

23 日志
6 分类
© 2019 Chenhaha | Site words total count: 4.8k
本站访客数:
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4