图像处理
- 34.边缘检测
- 35.gabor滤波
- 36.画线条
- 37.画实心圆
- 38.画四边形
- 39.画六边形
- 40.画椭圆形
- 41.画空心圆
- 42.平移图像
- 43.图像的镜像
34.边缘检测
(1)sobel算子:可用来检测边缘
(2)scharr算子:同sobel算子
(3)prewitt算子:同sobel算子
(4)canny算子:canny算子也是用于提取边缘特征,但它不是放在filters模块,而是放在feature模块
python">from skimage import data,filters,feature
import matplotlib.pyplot as pltimg=io.imread('iii.jpg')plt.subplot(231)
plt.title('1')
plt.imshow(img,plt.cm.gray)plt.subplot(232)
plt.title('2')
edges2 = filters.sobel(img)
plt.imshow(edges2,plt.cm.gray)plt.subplot(233)
plt.title('3')
img_gray3 = color.rgb2gray(img)
edges3 = filters.sobel(img_gray3)
plt.imshow(edges3)plt.subplot(234)
plt.title('4')
img_gray4 = color.rgb2gray(img)
edges4 = filters.scharr(img_gray4)
plt.imshow(edges4)plt.subplot(235)
plt.title('5')
img_gray5 = color.rgb2gray(img)
edges5 = filters.prewitt(img_gray5)
plt.imshow(edges5)#canny算子
plt.subplot(236)
plt.title('6')
img_gray6 = color.rgb2gray(img)
edges6 = feature.canny(img_gray6)plt.imshow(edges6)
35.gabor滤波
gabor滤波可用来进行边缘检测和纹理特征提取。
python">from skimage import data,filters,color
import matplotlib.pyplot as plt
img = io.imread('iii.jpg')
img_gray = color.rgb2gray(img)
#
filt_real, filt_img = filters.gabor(img_gray,frequency=0.6) plt.figure('gabor',figsize=(8,8))plt.subplot(121)
plt.title('filt_real')
plt.imshow(filt_real,plt.cm.gray) plt.subplot(122)
plt.title('filt-imag')
plt.imshow(filt_img,plt.cm.gray)plt.show()
36.画线条
skimage.draw.line(r1,c1,r2,c2)
r1,r2: 开始点的行数和结束点的行数
c1,c2: 开始点的列数和结束点的列数
python">from skimage import data,draw,color
import matplotlib.pyplot as plt
img = io.imread('iii.jpg')
#表示从(120,50)到(120,240)连一条线
rr,cc=draw.line(120,50,120,240)
img[rr,cc] = 255
plt.imshow(img,plt.cm.gray)
绘制其他颜色线条
python">from skimage import data,draw,color
import matplotlib.pyplot as plt
img = io.imread('iii.jpg')
rr,cc=draw.line(120,50,120,240)
#绘制颜色线条
draw.set_color(img,[rr,cc],[0,0,100])
# img[rr,cc] = 255
plt.imshow(img,plt.cm.gray)
37.画实心圆
skimage.draw.circle(cy, cx, radius)
cy和cx表示圆心点,radius表示半径
python">from skimage import data,draw,color
import matplotlib.pyplot as plt
img = io.imread('iii.jpg')
#圆心点坐标为(120,120),半径为30
rr,cc=draw.disk((120,120),30)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)
38.画四边形
skimage.draw.polygon(Y,X)
Y为多边形顶点的行集合,X为各顶点的列值集合。
python">from skimage import data,draw,color
import matplotlib.pyplot as plt
import numpy as np
img=io.imread('iii.jpg')
#设置四个顶点,所以是四边形
Y=np.array([10,10,60,100])
X=np.array([100,180,220,180])
#Y为多边形顶点的行集合,X为各顶点的列值集合。
rr,cc=draw.polygon(Y,X)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)
39.画六边形
python">from skimage import data,draw,color
import matplotlib.pyplot as plt
import numpy as np
img=io.imread('iii.jpg')
#设置六个顶点,所以是六边形
Y=np.array([10,10,60,100,100,60])
X=np.array([100,180,220,180,100,60])
rr,cc=draw.polygon(Y,X)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)
40.画椭圆形
skimage.draw.ellipse(cy, cx, yradius, xradius)
cy和cx为中心点坐标,yradius和xradius代表长短轴。
python">from skimage import data,draw,color
import matplotlib.pyplot as plt
img=io.imread('iii.jpg')
#50和150为中心坐标,30和80表示短轴和长轴
rr,cc=draw.ellipse(50,150,30,80)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)
41.画空心圆
skimage.draw.circle_perimeter(yx,yc,radius)
yx,yc是圆心坐标,radius是半径
python">from skimage import data,draw,color
import matplotlib.pyplot as plt
img = io.imread('iii.jpg')
#150和150 表示圆心坐标,50表示半径
rr, cc=draw.circle_perimeter(150,150,50)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)
42.平移图像
matplotlib.pyplot通常用于绘图,matplotlib.image用于加载图像,Affine2D来自matplotlib.transforms模块,用于进行2D仿射变换。
python"># 导入所需的库
# matplotlib.pyplot 用于创建图形和子图
# matplotlib.image 用于读取图像文件
# matplotlib.transforms 用于创建变换对象
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from matplotlib.transforms import Affine2D
# 读取图像文件 'iii.jpg' 并将其存储在变量 img 中
img = mpimg.imread('iii.jpg')
# 创建一个图形,命名为 'gabor',并设置其尺寸为 8x8 英寸
plt.figure('gabor',figsize=(8,8))
# 设置x轴的范围为 -100 到 100
plt.xlim(-100, 100)plt.subplot(1, 2, 1)
plt.imshow(img)
plt.title('1')
plt.axis('off')plt.subplot(1, 2, 2)
# 创建一个变换对象,将图像平移 150 个单位
transform = Affine2D().translate(150, 150)
#transform 与 plt.gca().transData 相加,您可以确保变换是应用在数据坐标上的,而不是显示坐标上。
plt.imshow(img, transform=transform + plt.gca().transData)
plt.title('2')
plt.axis('off')plt.show()
43.图像的镜像
逆时针旋转,水平翻转,垂直翻转
python"># matplotlib.pyplot 用于创建图形和子图
# matplotlib.image 用于读取图像文件
# numpy 用于处理图像数据
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as npimg = mpimg.imread('iii.jpg')
#对图像进行逆时针旋转90度
rotated_img = np.rot90(img)
#对图像进行水平翻转
flipped_img_horizontal = np.fliplr(img)
#对图像进行垂直翻转
flipped_img_vertical = np.flipud(img) plt.subplot(2, 2, 1)
plt.imshow(img)
plt.title('Original Image')
plt.axis('off')plt.subplot(2, 2, 2)
plt.imshow(rotated_img)
plt.title('Rotated Image')
plt.axis('off')plt.subplot(2, 2, 3)
plt.imshow(flipped_img_horizontal)
plt.title('Flipped Horizontal Image')
plt.axis('off')plt.subplot(2, 2, 4)
plt.imshow(flipped_img_vertical)
plt.title('Flipped Vertical Image')
plt.axis('off')plt.show()