Press "Enter" to skip to content

利用 Keras 进行图片边缘检测

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

依赖库

requirements.txt 内容如下

  numpy  pillow

工程目录结构

其中1.6.py为本教程脚本。要处理的示例图片:

test.png

图片预处理

# 打开图片(图片放在工程目录 img 文件夹下)img = Image.open('img/test.png')# 转换成灰度图是 "L",转换成RGB是"RGB"img_gray = img.convert("L")# 因为 keras 要求 2D 卷积层的输入的形状是 (宽, 高, 通道数),这里只有灰度值一个通道,所以对维度进行扩展img_gray_array = np.expand_dims(np.array(img_gray), axis=2)# img_gray_array.shape = (64, 64, 1)

创建卷积层

# 创建模型model = kr.Sequential()# 定义卷积核def jk_kernel(shape):    return np.expand_dims(np.expand_dims(kernel, axis=2), axis=2)# 添加卷积层model.add(kr.layers.Conv2D(filters=1, kernel_size=3, kernel_initializer=jk_kernel, strides=1, padding='same', name='conv2d', input_shape=img_gray_array.shape))# 编译模型model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

输出中间层的结果

conv2d_layer_model = kr.Model(inputs=model.input,                                     outputs=model.get_layer('conv2d').output)conv2d_output = conv2d_layer_model.predict(np.expand_dims(img_gray_array, axis=0))# conv2d_output.shape = (1, 64, 64, 1)

显示

# 缩减维度img_gray_array_squeeze = np.squeeze(conv2d_output)# 保存结果,也可以用 show() 方法来显示图片Image.fromarray(img_gray_array_squeeze).convert('RGB').save(fp='img/edge.png')

输出的边缘检测结果为:

edge.png

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注