LPX55's picture
feat: integrate ONNX model inference and logging enhancements, add contextual intelligence and forensic anomaly detection agents
e1eac06
raw
history blame
1.34 kB
import cv2 as cv
import numpy as np
from PIL import Image
def bit_plane_extractor(
image: Image.Image,
channel: str = "Luminance",
bit: int = 0,
filter_type: str = "Disabled"
) -> Image.Image:
"""Extract and visualize a bit plane from a selected channel of the image.
Args:
image (Image.Image, string: filepath): The input image to analyze.
channel (str, optional): The channel to extract. Defaults to "Luminance".
bit (int, optional): The bit to extract. Defaults to 0.
filter_type (str, optional): The type of filter to apply. Defaults to "Disabled".
"""
img = np.array(image.convert("RGB"))
if channel == "Luminance":
img = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
elif channel == "RGB Norm":
b, g, r = cv.split(img.astype(np.float64))
img = np.sqrt(np.power(b, 2) + np.power(g, 2) + np.power(r, 2)).astype(np.uint8)
else:
idx = {"Red": 0, "Green": 1, "Blue": 2}[channel]
img = img[:, :, idx]
plane = cv.bitwise_and(np.full_like(img, 2 ** bit), img)
plane = cv.normalize(plane, None, 0, 255, cv.NORM_MINMAX).astype(np.uint8)
if filter_type == "Median":
plane = cv.medianBlur(plane, 3)
elif filter_type == "Gaussian":
plane = cv.GaussianBlur(plane, (3, 3), 0)
return Image.fromarray(plane)