Битовое наложение изображений

  Битовая нарезка — это метод, обычно используемый при обработке изображений, который включает в себя разделение представления значений пикселей изображения на различные двоичные битовые плоскости. Эти плоскости могут представлять различные особенности или информацию на изображении соответственно, предоставляя тем самым полезные инструменты для анализа, улучшения и сжатия изображения. Ниже приводится объяснение математических принципов, значения и сценариев использования слоев битовой плоскости:
Математический принцип:
  для изображения в оттенках серого значение пикселя каждого пикселя может быть представлено 8-битным двоичным числом (обычно в диапазоне 0). до 255). Слои битовой плоскости заключаются в разделении этих 8-битных двоичных чисел на 8 независимых плоскостей, каждая из которых соответствует определенному двоичному биту. Каждая битовая плоскость содержит информацию только об этом бите соответствующего пикселя изображения, а остальные биты установлены в 0. Это можно выразить следующей математической формулой:
  Для значения пикселя ppp , его 8-битное двоичное представление:p = b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 p = b_7b_6b_5b_4b_3b_2b_1b_0п"="б7б6б5б4б3б2б1б0, где b 7 b_7б7Представляет старший бит, b 0 b_0б0Указывает младший бит. Тогда iii битовая плоскость (i = 0 , 1 , … , 7 i = 0, 1, \ldots, 7я"="0 ,1 ,,7 ) можно выразить как:
P i (x, y) = bi P_i(x, y) = b_iпя( х ,й )"="бя
Здесь (х, у) (х, у)( х ,y ) — координаты пикселей на изображении.

Значение.
  Основное значение наложения битовых плоскостей заключается в разложении информации изображения, чтобы мы могли наблюдать и манипулировать различными деталями и особенностями изображения. Старшая битовая плоскость ( b 7 b_7б7до б 4 б_4б4) обычно содержит глобальную структуру и основные особенности изображения, тогда как низкобитовая плоскость ( b 3 b_3б3до б 0 b_0б0) содержит более мелкие детали. Это делает слои битовой плоскости основой для нескольких операций:

  1. Улучшение изображения. Путем улучшения определенных битовых плоскостей можно выделить или подавить определенные детали изображения, тем самым улучшая визуальное качество изображения.
  2. Сжатие изображения. В некоторых случаях отказ от информации младших разрядов может обеспечить сжатие изображения и снизить накладные расходы на хранение и передачу.
  3. Анализ изображения. Рассматривая различные битовые плоскости, вы можете лучше понять структуру, текстуру и особенности изображения.

Сценарии использования.
  Слои битовой плоскости полезны в различных сценариях обработки изображений, в том числе:

  • Улучшение изображения. Путем улучшения плоскостей высокого уровня можно выделить основные элементы изображения и улучшить эффект визуализации изображения.
  • Сжатие изображения. Отказывая от низкобитовой плоскости, можно добиться сжатия изображения без потерь или с потерями, сокращая накладные расходы на хранение и передачу.
  • Анализ изображения. Анализ битовых плоскостей может помочь идентифицировать такие особенности изображений, как текстура, форма и края.
  • Стеганография. В стеганографии плоскости низкого уровня можно использовать для сокрытия секретной информации, не влияя на внешний вид изображения.
      Подводя итог, можно сказать, что наложение битовых плоскостей — это полезный инструмент обработки изображений, который можно использовать для различных целей в разных областях: от улучшения изображения до анализа его особенностей.
      Процесс реализации кода следующий:
import cv2                     # 导入OpenCV库用于图像处理
import matplotlib.pyplot as plt  # 导入matplotlib库用于绘图
import numpy as np              # 导入NumPy库用于数值操作

class BIT:
    def __init__(self, input_path):
        self.input_path = input_path  # 初始化类,传入输入图像路径

    def fenceng(self):
        img_gray = cv2.imread(self.input_path, flags=0)  # 以灰度方式读取输入图像
        if img_gray is None:
            print('Unable to load image!')
        else:
            print('Load image successfully!')

        height, width = img_gray.shape[:2]  # 获取图像的高度和宽度

        plt.figure(figsize=(10, 8))  # 设置绘图的图像大小
        for i in range(9, 0, -1):   # 循环从9到1(倒序)
            plt.subplot(3, 3, (9 - i) + 1, xticks=[], yticks=[])  # 在3x3的网格中创建子图

            if i == 9:  # 对于第一个子图(i = 9),显示原始灰度图像
                plt.imshow(img_gray, cmap='gray')
                plt.title('Original')
            else:
                img_bit = np.empty((height, width), dtype=np.uint8)  # 创建一个空的图像数组

                for w in range(width):
                    for h in range(height):
                        x = np.binary_repr(img_gray[h, w], width=8)  # 将像素值转换为8位二进制字符串
                        x = x[::-1]  # 反转二进制字符串
                        a = x[i - 1]  # 从反转的二进制字符串中获取第(9-i)位的值
                        img_bit[h, w] = int(a)  # 将像素值设置为所选位的值

                plt.imshow(img_bit, cmap='gray')  # 显示带有所选位平面的图像
                plt.title(f"{bin((i - 1))}")  # 将标题设置为(i - 1)的二进制表示

        plt.show()  # 显示包含所有子图的完整图像

# 输入图像文件的路径
imgfile = "./Images/stuff.jpg"
bit = BIT(imgfile)  # 使用输入图像路径创建BIT类的实例
bit.fenceng()  # 调用fenceng方法执行位平面分割并可视化操作

рекомендация

отblog.csdn.net/qq_50993557/article/details/132154063
рекомендация