Capas de imágenes en planos de bits

  Bit-Plane Slicing es una técnica comúnmente utilizada en el procesamiento de imágenes que implica dividir la representación del valor de píxel de una imagen en diferentes planos de bits binarios. Estos planos pueden representar diferentes características o información en la imagen respectivamente, proporcionando así herramientas útiles en el análisis, mejora y compresión de imágenes. La siguiente es una explicación de los principios matemáticos, el significado y los escenarios de uso de la estratificación del plano de bits:
Principio matemático:
  para una imagen en escala de grises, el valor de píxel de cada píxel se puede representar mediante un número binario de 8 bits (generalmente en el rango de 0 a 255). La estratificación del plano de bits consiste en dividir estos números binarios de 8 bits en 8 planos independientes, cada plano correspondiente a un bit binario específico. Cada plano de bits solo contiene información sobre ese bit del píxel correspondiente en la imagen, y los demás bits se establecen en 0. Esto se puede expresar mediante la siguiente fórmula matemática:
  Para un valor de píxel ppp , su representación binaria de 8 bits esp = 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_0pag=b7b6b5b4b3b2b1b0, donde b 7 b_7b7Representa el bit más alto, b 0 b_0b0Indica el bit más bajo. Entonces yoi plano de bits (i = 0 , 1 , … , 7 i = 0, 1, \ldots, 7i=0 ,1 ,,7 ) se puede expresar como:
P i (x, y) = bi P_i(x, y) = b_iPAGyo( x ,y )=byo
Aquí (x, y) (x, y)( x ,y ) son las coordenadas de píxeles de la imagen.

Importancia:
  La principal importancia de las capas de planos de bits es descomponer la información de la imagen para que podamos observar y manipular diferentes detalles y características de la imagen. Plano de bits alto ( b 7 b_7b7a b 4 b_4b4) generalmente contiene la estructura global y las características principales de la imagen, mientras que el plano de bits bajos ( b 3 b_3b3a b 0 b_0b0) contiene detalles más finos. Esto hace que la estratificación del plano de bits sea la base para varias operaciones:

  1. Mejora de la imagen: al mejorar planos de bits específicos, se pueden resaltar o suprimir ciertos detalles de una imagen, mejorando así la calidad visual de la imagen.
  2. Compresión de imágenes: en algunos casos, descartar información de bits inferiores puede lograr la compresión de imágenes y reducir la sobrecarga de almacenamiento y transmisión.
  3. Análisis de imágenes: al observar diferentes planos de bits, puede comprender mejor la estructura, la textura y las características de una imagen.

Escenarios de uso:
  la estratificación del plano de bits es útil en una variedad de escenarios de procesamiento de imágenes, que incluyen:

  • Mejora de la imagen: al mejorar los planos de alto nivel, se pueden resaltar las características principales de la imagen y se puede mejorar el efecto de visualización de la imagen.
  • Compresión de imágenes: al descartar el plano de bits bajos, se puede lograr una compresión de imágenes con o sin pérdidas, lo que reduce la sobrecarga de almacenamiento y transmisión.
  • Análisis de imágenes: el análisis de planos de bits puede ayudar a identificar características en imágenes como textura, forma y bordes.
  • Esteganografía: En esteganografía, se pueden utilizar planos de bajo nivel para ocultar información secreta sin afectar la apariencia de la imagen.
      En resumen, la estratificación de planos de bits es una herramienta útil de procesamiento de imágenes que se puede utilizar para múltiples propósitos en diferentes campos, desde mejorar la imagen hasta analizar sus características.
      El proceso de implementación del código es el siguiente:
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方法执行位平面分割并可视化操作

Supongo que te gusta

Origin blog.csdn.net/qq_50993557/article/details/132154063
Recomendado
Clasificación