sobel

基于MATLAB的腐蚀膨胀算法实现

ε祈祈猫儿з 提交于 2020-04-04 04:01:01
  本篇文章要分享的是基于MATLAB的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,腐蚀在二值图像的基础上做“收缩”或“细化”操作,膨胀在二值图像的基础上做“加长”或“变粗”的操作。   什么是二值图像呢?把一幅图片看做成一个二维的数组,那么二值图像是一个只有0和1的逻辑数组,我们前面Sobel边缘检测后的图像输出边缘效果,设置个阈值,大于阈值输出为1,小于阈值输出为0,最后输出就是一幅二维图像了。 腐蚀   腐蚀是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体。用3X3的结构元素,扫描图像的每一个像素,用结构元素与其覆盖的二值图像做“与”操作,如果都为1,结果图像的该像素为1。否则为0。结果会使二值图像小一圈。   有一个形象的比喻来可以说明该运算,用0表示蛀虫,1表示大米。蛀虫腐蚀大米的过程便是腐蚀运算, 腐蚀   如图所示,对于一个像素矩阵而言,只要有蛀虫(0)的存在,大米(1)就会被腐蚀掉了,即使只存在一个蛀虫(0),但是还是会被蛀虫腐蚀完毕,最后一幅图上面由于没有蛀虫(0)所以大米完好无损。 关于算法的实现,可以用下式子来表示,即3x3像素的运算: P = P11 & P12 & P13 & P21 & P22 & P23 & P31 & P32 & P33 在FPGA中,为了通过面积去换速度,我们将上式改变如下:               

基于matlab的经典图像边缘检测算法

半世苍凉 提交于 2020-03-25 04:55:17
图像边缘检测算法 (1)Robert算子边缘检测 (2)Sobel算子边缘检测 (3)Prewitt算子边缘检测 (4)LOG算子边缘检测 (5)Canny边缘检测 Matlab的实现。 其实还只是掉包侠,一点算法没有写 争取有空用openCV写一遍 I=imread('1.jpg'); I0=rgb2gray(I); subplot(231); imshow(I); BW1=edge(I0,'Roberts',0.16); subplot(232); imshow(BW1); title('Robert算子边缘检测') BW2=edge(I0,'Sobel',0.16); subplot(233); imshow(BW2); title('Sobel算子边缘检测') BW3=edge(I0,'Prewitt',0.16); subplot(234); imshow(BW3); title('Prewitt算子边缘检测'); BW4=edge(I0,'LOG',0.012); subplot(235); imshow(BW4); title('LOG算子边缘检测') BW5=edge(I0,'Canny',0.2); subplot(236); imshow(BW5); title('Canny算子边缘检测')    来源: https://www.cnblogs.com

机器视觉作业

倖福魔咒の 提交于 2020-03-12 12:23:47
边缘检测算子 一、题目描述 将图像进行反色显示 进行Sobel算子滤波再将其反色显示 进行Roberts算子滤波再将其反色显示 二、实现过程 代码: import cv2 import numpy as np from matplotlib import pyplot as plt from PIL import Image, ImageDraw, ImageFont plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = ['SimHei'] # 读取图像 src_s = cv2.imread("C:/Users/dell/Desktop/dip.bmp") #反色 ret,src = cv2.threshold(src_s,80,255,cv2.THRESH_BINARY) src = cv2.bitwise_not(src_s) cv2.imshow('src',src) #Sobel算子滤波 x=cv2.Sobel(src,cv2.CV_16S,0,1)#对x求一阶导 y=cv2.Sobel(src,cv2.CV_16S,0,1)#对y求一阶导 absx=cv2.convertScaleAbs(x)#计算绝对值,并将图像转换为8位图进行显示 absy=cv2

OpenCV基本函数与原理(三)

别等时光非礼了梦想. 提交于 2020-03-10 05:42:28
1自定义线性滤波 1.1卷积概念 卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作。 Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point) 卷积如何工作: 把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。数学表达如下: 例子: Sum = 8x1+6x1+6x1+2x1+8x1+6x1+2x1+2x1+8x1 New pixel = sum / (m n) = Sum / (3 3) 卷积作用: 1模糊图像; 2)提取边缘; 3)进行图像増显,锐化等。 1.2 常见算子 1)Robert 算子(Robert X 算子 和 Robert Y 算子) 例子:Mat robert_x = (Mat_(2, 2) << 1, 0, 0, -1); 2)Sobel 算子(Sobel X 算子 和 Sobel Y 算子) 例:Mat sobel_x = (Mat_(3, 3) << -1, 0, 1, -2, 0, 2, -1, 0, 1); 3)拉普拉斯算子 例子: Mat lpls = (Mat_(3, 3) << 0, -1, 0, -1, 4, -1, 0, -1, 0); 自定义卷积模糊API: filter2D方法 filter2D ( Mat src , /

图像梯度(Image Gradient)概念和Sobel算子

核能气质少年 提交于 2020-03-02 04:22:05
1.图像梯度 图像梯度是指图像某像素在x和y两个方向上的变化率(与相邻像素比较),是一个二维向量,由2个分量组成,X轴的变化、Y轴的变化 。 其中X轴的变化是指当前像素右侧(X加1)的像素值减去当前像素左侧(X减1)的像素值。 同理,Y轴的变化是当前像素下方(Y加1)的像素值减去当前像素上方(Y减1)的像素值。 计算出来这2个分量,形成一个二维向量,就得到了该像素的图像梯度。取反正切arctan,可得到梯度角度。 这个求图像梯度的过程可以通过一个卷积核来实现:[-1,0,1] 图像梯度的绝对值为 图像梯度的角度为 python代码 import numpy as np import scipy . signal as sig data = np . array ( [ [ 0 , 105 , 0 ] , [ 40 , 255 , 90 ] , [ 0 , 55 , 0 ] ] ) G_x = sig . convolve2d ( data , np . array ( [ [ - 1 , 0 , 1 ] ] ) , mode = 'valid' ) G_y = sig . convolve2d ( data , np . array ( [ [ - 1 ] , [ 0 ] , [ 1 ] ] ) , mode = 'valid' ) 2.扩展版图像梯度(Sobel)

opencv之Sobel

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-01 01:49:13
import cv2 # 载入原始图片 img = cv2 . imread ( "lena.jpg" , 1 ) gray = cv2 . cvtColor ( img , cv2 . COLOR_BGR2GRAY ) # 计算图像x方向梯度 sobel_x = cv2 . Sobel ( gray , cv2 . CV_64F , 1 , 0 , ksize = 3 ) # 计算图像y方向梯度 sobel_y = cv2 . Sobel ( gray , cv2 . CV_64F , 0 , 1 , ksize = 3 ) # 由于会出现负值的情况,因此使用cv2.convertScalerAbs() 转换为绝对值的形式 abs_sobel_x = cv2 . convertScaleAbs ( sobel_x ) abs_sobel_y = cv2 . convertScaleAbs ( sobel_y ) # sobel算子图 abs_sobel = cv2 . addWeighted ( abs_sobel_x , 0.5 , abs_sobel_y , 0.5 , 0 ) cv2 . imshow ( "abs_sobel_x" , abs_sobel_x ) cv2 . imshow ( "abs_sobel_y" , abs_sobel_y ) cv2 .

OpenCV--图像梯度处理

对着背影说爱祢 提交于 2020-02-10 16:05:41
图像梯度-Sobel算子 img = cv2.imread('pie.png',cv2.IMREAD_GRAYSCALE) cv2.imshow("img",img) cv2.waitKey() cv2.destroyAllWindows() 效果: dst = cv2.Sobel(src, ddepth, dx, dy, ksize) ddepth:图像的深度 dx和dy分别表示水平和竖直方向 ksize是Sobel算子的大小 def cv_show(img,name): cv2.imshow(name,img) cv2.waitKey() cv2.destroyAllWindows() sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3) cv_show(sobelx,'sobelx') 效果: sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3) sobelx = cv2.convertScaleAbs(sobelx) #白到黑是正数,黑到白就是负数了,所有的负数会被截断成0,所以要取绝对值 cv_show(sobelx,'sobelx') 效果: sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3) sobely = cv2.convertScaleAbs

【百度快照】基于MATLAB的人民币纸币系列号面额识别系统【GUI】

白昼怎懂夜的黑 提交于 2020-02-07 05:58:50
源码: https://download.csdn.net/download/weixin_38719187/12135693 一、课题介绍 本设计为基于MATLAB的人民币识别系统。带有一个GUI界面。先利用radon进行倾斜校正,根据不同纸币,选择不同维度的参数识别纸币金额,有通过RGB分量识别100元; 通过面额图像的宽度识别1元、5元;通过构建矩形结构体识别10元 ;通过RGB分量识别 20元 与 50元。 二、运行GUI界面设计 三、运行界面 四、主程序 1、读入钞票 function ima = getImage() [filename, pathname] = uigetfile({’ .jpg; .tif; .png; .gif’,‘All Image Files’;… ‘ . ’,‘All Files’ }); ima = imread([ pathname,filename]); 2、对纸币进行radon旋转矫正 l1=rgb2gray(l); %将真彩色图像转换为灰度图像 bw1=edge(l1,‘sobel’, ‘both’); %采用sobel算子进行边缘检测 theta=0:179; %定义theta角度范围 r=radon(bw1,theta); %对图像进行Radon变换 %%%%%检测Radon变换矩阵中的峰值所对应的列坐标%%%% [m,n]