二值图像归一化

同门在跑一个项目时,遇到了标签不对的问题,查阅了网络说明发现是以下的问题:

 这是由于该网络中需要的标签的像素值为1或者0两个值,而我们所下载的标签的值不符合,估计是0和255两个值,所以导致在训练时出现精确度为0的情况。这种情况下有两种方案可以使得项目得以继续,其中一种是针对原始网络进行修改,为之添加可以归一化的代码或者将代码中的只能对0、1两个像素值进行计算的改为可以对0和255两个值进行计算;另一种思路是改标签的像数值,将其进行归一化。考虑到难易程度,我们选择第二种方案,就是针对标签图片进行修改。修改的代码如下所示:

from PIL import Image
import os


def normalize_binary_images(directory,directory2):
    for filename in os.listdir(directory):
        if filename.endswith(".bmp") or filename.endswith(".png") or filename.endswith(".jpg"):
            image_path = os.path.join(directory, filename)
            image = Image.open(image_path).convert("L")

            # 获取图片的最大最小像素值
            min_pixel = 255
            max_pixel = 0
            pixels = image.getdata()
            for pixel in pixels:
                min_pixel = min(min_pixel, pixel)
                max_pixel = max(max_pixel, pixel)

            # 将像素值小于等于阈值的设置为纯黑色(0),大于阈值的设置为纯白色(255)
            threshold = (min_pixel + max_pixel) // 2
            normalized_image = image.point(lambda p: 0 if p <= threshold else 255, "1")

            # 保存归一化后的图像
            normalized_image.save(os.path.join(directory2 ,filename))

            print(f"Normalized {filename} successfully.")


# 使用示例
directory_path = "C:/F/水牛的项目" #归一化前的图像
directory_path1 = "C:/F/水牛的项目/转化后"  #归一化后的图像
normalize_binary_images(directory_path, directory_path1)

只需要将使用示例中的路径改为你项目所在的路径即可。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱改网络的法式小面包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值