美文网首页人工智能@IT·互联网程序员
利用 Keras 进行图片边缘检测 —— Jinkey 原创

利用 Keras 进行图片边缘检测 —— Jinkey 原创

作者: JinkeyAI | 来源:发表于2018-05-24 18:29 被阅读221次

    原文链接 https://jinkey.ai/post/tech/li-yong-keras-jin-xing-tu-pian-bian-yuan-jian-ce
    本文作者 Jinkey(微信公众号 jinkey-love,官网 https://jinkey.ai
    文章允许非篡改署名转载,删除或修改本段版权信息转载的,视为侵犯知识产权,我们保留追求您法律责任的权利,特此声明!

    依赖库

    requirements.txt 内容如下

    keras
    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

    相关文章

      网友评论

        本文标题:利用 Keras 进行图片边缘检测 —— Jinkey 原创

        本文链接:https://www.haomeiwen.com/subject/gyvsjftx.html