>기술 주변기기 >일체 포함 >디지털 이미지 처리를 위한 이미지 조작

디지털 이미지 처리를 위한 이미지 조작

PHPz
PHPz앞으로
2023-12-14 17:46:031638검색

컴퓨터 비전 및 이미지 처리에서 이미지 조작은 중요한 역할을 합니다. 이러한 작업은 전처리, 이미지 품질 개선, 고급 알고리즘 활성화와 같은 작업에 중요합니다. 컴퓨터 비전 분야에서는 크기 조정, 자르기, 밝기/대비/감마 조정, 기하학적 변환과 같은 작업이 기본 작업입니다. 이를 통해 효율적인 계산, 관심 영역 추출, 이미지 강도 정규화 및 기하학적 보정이 가능합니다. 이미지 처리 측면에서 이러한 작업은 다운샘플링, 관련 없는 영역 자르기, 가시성과 품질 향상, 기하학적 작업 수행에도 중요합니다.

디지털 이미지 처리를 위한 이미지 조작

Resizing

다양한 시나리오에서 이미지 크기 조정은 일반적이며 이미지를 특정 크기에 맞추거나 파일 크기를 줄이는 등의 목적으로 사용할 수 있습니다. 이미지 보간 및 리샘플링은 이미지 처리 및 컴퓨터 비전에서 이미지 크기를 조정하는 데 사용되는 기술입니다.

이미지 보간

이미지 보간이란 알려진 픽셀 값을 기반으로 이미지 내 알 수 없는 위치의 픽셀 값을 추정하는 프로세스를 말합니다. 다양한 보간 방법은 다양한 방법을 사용하여 알 수 없는 픽셀

의 값을 추정하며 다음과 같이 다시 작성됩니다. 최근접 이웃 보간(Nearest Neighbor Interpolation)은 알려지지 않은 픽셀 위치의 값을 가장 가까운 알려진 픽셀의 값에 할당하는 방법입니다. 이 방법은 간단하지만 차단 아티팩트 및 세부 정보 손실 문제가 발생할 수 있습니다.

디지털 이미지 처리를 위한 이미지 조작

Nearest Neighbor Interpolation

쌍선형 보간 알고리즘은 가장 가까운 알려진 4개의 픽셀 값을 고려하고 해당 값을 추정합니다. 가중 평균에 의한 알 수 없는 픽셀. 쌍선형 보간은 최근접 이웃 보간보다 더 부드러운 결과를 생성할 수 있지만 여전히 일부 흐림 효과가 발생할 수 있습니다.

쌍삼차 보간은 더 많은 인접 픽셀을 고려하고 삼차 다항식을 사용하여 픽셀 값을 추정하는 쌍선형 보간을 사용하여 확장됩니다. 이 방법을 사용하면 전환이 더 원활해지고 이미지 세부 정보가 더 잘 보존되어 더 높은 품질의 결과를 얻을 수 있습니다.

import cv2import numpy as npdef resize_image(image, scale, interpolation):width = int(image.shape[1] * scale)height = int(image.shape[0] * scale)resized_image = cv2.resize(image, (width, height), interpolation=interpolation)return resized_imageSCALE = 4# Load the imageimage_path = "image.png"image = cv2.imread(image_path)# Resize the image using nearest neighbor interpolationnearest_neighbor_resized = resize_image(image, scale=SCALE, interpolation=cv2.INTER_NEAREST)# Resize the image using bilinear interpolationbilinear_resized = resize_image(image, scale=SCALE, interpolation=cv2.INTER_LINEAR)# Resize the image using bicubic interpolationbicubic_resized = resize_image(image, scale=SCALE, interpolation=cv2.INTER_CUBIC)

디지털 이미지 처리를 위한 이미지 조작

Crop

이미지 자르기의 목적은 원하지 않는 콘텐츠를 제거하거나 특정 관심 영역에 초점을 맞추는 것입니다. 자르기를 사용하면 구성을 최적화하고 방해 요소를 제거하며 이미지의 중요한 요소를 강조할 수 있습니다. 불필요하거나 관련 없는 부분을 제거하면 의도한 메시지나 주제를 효과적으로 전달하는 시각적으로 매력적이고 영향력 있는 이미지가 만들어집니다.

다양한 방법을 사용하여 자르기 영역을 결정할 수 있습니다.

  • 수동 선택: 수동 자르기에는 이미지를 육안으로 검사하고 유지할 영역을 선택하는 작업이 포함됩니다. 이 접근 방식은 유연성을 제공하며 사진가나 디자이너의 예술적 판단을 바탕으로 주관적인 결정을 내릴 수 있도록 해줍니다.
  • 객체 감지: 객체 감지 알고리즘을 기반으로 한 자동 자르기 기술은 이미지에서 특정 객체나 피사체를 식별하고 추출할 수 있습니다. 이러한 알고리즘은 이미지를 분석하고 사전 정의된 패턴이나 훈련된 모델을 기반으로 개체를 찾습니다. 감지된 개체를 자르기 영역으로 사용할 수 있으므로 관련 없는 배경이나 주변 영역을 제거하면서 중요한 요소는 그대로 유지할 수 있습니다.
  • 분할: 의미론적 분할 또는 인스턴스 분할과 같은 이미지 분할 기술을 사용하여 이미지를 의미 있는 영역으로 나눌 수 있습니다. 이러한 기술은 다양한 개체나 영역에 라벨이나 마스크를 할당하여 특정 부분을 자르거나 특정 관심 영역을 분리할 수 있게 해줍니다.

import cv2def crop_image(image, x, y, width, height):cropped_image = image[y:y+height, x:x+width]return cropped_image# Example usageimage = cv2.imread("cath.jpeg")cropped_image = crop_image(image, x=400, y=500, width=300, height=200)cv2.imshow("Cropped Image", cropped_image)cv2.waitKey(0)cv2.destroyAllWindows()

조정

밝기 및 대비:

이미지의 가시성을 높이고 시각적 매력을 향상하려면 밝기와 대비를 조정하는 것이 필수적입니다. 밝기를 조정하면 이미지가 더 밝거나 어둡게 표시되어 노출 부족 또는 노출 과다 영역의 세부 사항을 강조할 수 있습니다. 대비 조정을 통해 밝은 영역과 어두운 영역의 구분이 향상되어 이미지가 더욱 선명하고 역동적으로 나타납니다.

밝기와 대비를 조정하면 이미지의 전반적인 품질과 가독성을 향상시켜 중요한 특징을 명확하게 볼 수 있습니다.

import cv2import numpy as npimage_path = "cath.jpeg"def adjust_brightness(image, value):# Convert the image to the HSV color spacehsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)# Split the channelsh, s, v = cv2.split(hsv)# Apply the brightness adjustmentv = cv2.add(v, value)# Clamp the values to the valid range of 0-255v = np.clip(v, 0, 255)# Merge the channels back togetherhsv = cv2.merge((h, s, v))# Convert the image back to the BGR color spaceadjusted_image = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)return adjusted_imagedef adjust_contrast(image, value):# Convert the image to the LAB color spacelab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)# Split the channelsl, a, b = cv2.split(lab)# Apply the contrast adjustmentl = cv2.multiply(l, value)# Clamp the values to the valid range of 0-255l = np.clip(l, 0, 255)# Merge the channels back togetherlab = cv2.merge((l, a, b))# Convert the image back to the BGR color spaceadjusted_image = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)return adjusted_image# Load the imageimage = cv2.imread(image_path)# Adjust the brightnessbrightness_adjusted = adjust_brightness(image, value=50)# Adjust the contrastcontrast_adjusted = adjust_contrast(image, value=2)# Display the original and adjusted imagescv2.imshow("Original", image)cv2.imshow("Brightness Adjusted", brightness_adjusted)cv2.imshow("Contrast Adjusted", contrast_adjusted)cv2.waitKey(0)cv2.destroyAllWindows()

디지털 이미지 처리를 위한 이미지 조작

히스토그램은 데이터 분포를 표시하는 데 사용되는 차트입니다. 데이터를 여러 간격으로 나누고 각 간격의 데이터 수를 계산한 다음 수직 막대를 그려 각 간격의 데이터 수를 나타냅니다. 히스토그램은 데이터 집중도, 왜곡도, 이상값 존재 여부 등 데이터의 분포 특성을 직관적으로 이해하는 데 도움이 됩니다. 히스토그램을 보면 데이터를 더 잘 이해하고 분석하여 보다 정확한 결정과 예측을 내릴 수 있습니다. 통계, 시장 조사, 재무 분석 및 기타 분야에서 히스토그램은 데이터 분석 및 시각적 균등화에 널리 사용됩니다

直方图是一种用于展示数据分布情况的图表。它将数据分成若干个区间,并统计每个区间内的数据数量,然后通过绘制垂直条形来表示各个区间的数据数量。直方图可以帮助我们直观地了解数据的分布特征,例如数据的集中程度、偏态以及异常值的存在等。通过观察直方图,我们可以更好地理解和分析数据,从而做出更准确的决策和预测。在统计学、市场研究、金融分析等领域,直方图被广泛应用于数据分析和可视化均衡化是一项用于增强对比度的技术。它通过重新分配像素强度值来覆盖更广范围的值,以实现此目的。其主要目标是通过图像获得更均匀分布的像素强度

通过重新分配像素强度,直方图是一种用于展示数据分布情况的图表。它将数据分成若干个区间,并统计每个区间内的数据数量,然后通过绘制垂直条形来表示各个区间的数据数量。直方图可以帮助我们直观地了解数据的分布特征,例如数据的集中程度、偏态以及异常值的存在等。通过观察直方图,我们可以更好地理解和分析数据,从而做出更准确的决策和预测。在统计学、市场研究、金融分析等领域,直方图被广泛应用于数据分析和可视化均衡化增强了图像的对比度。

import cv2import matplotlib.pyplot as pltimage_path = "cath.jpeg"image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)# Apply histogram equalizationequalized_image = cv2.equalizeHist(image)# Calculate histogramshist_original = cv2.calcHist([image], [0], None, [256], [0, 256])hist_equalized = cv2.calcHist([equalized_image], [0], None, [256], [0, 256])# Plot the histogramsplt.figure(figsize=(10, 5))plt.subplot(1, 2, 1)plt.plot(hist_original, color='b')plt.title("Original Image Histogram")plt.xlabel("Pixel Intensity")plt.ylabel("Frequency")plt.subplot(1, 2, 2)plt.plot(hist_equalized, color='r')plt.title("Equalized Image Histogram")plt.xlabel("Pixel Intensity")plt.ylabel("Frequency")plt.tight_layout()plt.show()

디지털 이미지 처리를 위한 이미지 조작

直方图是一种用于展示数据分布情况的图表。它将数据分成若干个区间,并统计每个区间内的数据数量,然后通过绘制垂直条形来表示各个区间的数据数量。直方图可以帮助我们直观地了解数据的分布特征,例如数据的集中程度、偏态以及异常值的存在等。通过观察直方图,我们可以更好地理解和分析数据,从而做出更准确的决策和预测。在统计学、市场研究、金融分析等领域,直方图被广泛应用于数据分析和可视化

# Display the original and equalized imagesfig, axes = plt.subplots(1, 2, figsize=(10, 5))axes[0].imshow(image, cmap='gray')axes[0].set_title("Original")axes[0].axis("off")axes[1].imshow(equalized_image, cmap='gray')axes[1].set_title("Equalized")axes[1].axis("off")plt.tight_layout()plt.show()

디지털 이미지 처리를 위한 이미지 조작

均衡化图像

缩放比例相等的比例尺称为线性缩放

缩放比例相等的比例尺称为线性缩放,也被称为对比度拉伸,用于调整图像的亮度和对比度,通过线性映射原始像素值到一个新的范围。该过程涉及重新缩放像素值,以利用图像中的最小值和最大值的完整动态范围

缩放比例相等的比例尺称为线性缩放的好处在于可以精确地控制亮度和对比度的调整。您可以根据具体需求定义所需的强度范围

import cv2import numpy as npimport matplotlib.pyplot as plt# Load the imageimage_path = "cath.jpeg"image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)# Calculate the minimum and maximum pixel values in the imagemin_value = np.min(image)max_value = np.max(image)# Define the desired minimum and maximum intensity values for the output imagenew_min = 5new_max = 10# Perform linear scalingscaled_image = cv2.convertScaleAbs(image, alpha=(new_max - new_min) / (max_value - min_value), beta=new_min - min_value * (new_max - new_min) / (max_value - min_value))# Display the original and scaled imagesfig, axes = plt.subplots(1, 2, figsize=(10, 5))axes[0].imshow(cv2.cvtColor(image, cv2.COLOR_GRAY2RGB))axes[0].set_title("Original")axes[0].axis("off")axes[1].imshow(scaled_image, cmap='gray')axes[1].set_title("Scaled")axes[1].axis("off")plt.tight_layout()plt.show()

디지털 이미지 처리를 위한 이미지 조작

缩放比例相等的比例尺称为线性缩放

重写内容:Gamma 校正

重写内容:Gamma 校正是一种技术,用于调整图像输入像素值和显示输出强度之间的非线性关系。它考虑到人类视觉系统对光的非线性响应,并旨在实现更准确和与感知一致的图像显示

相机捕捉或存储在图像文件中的像素值与人类感知亮度之间的关系是非线性的。换句话说,像素值的线性增加并不导致感知亮度的线性增加。这种非线性关系是由于成像传感器和人类视觉系统的响应特性导致的。

重写内容:Gamma 校正基于一个称为伽马(γ)的参数。伽马值表示输入像素值和显示输出强度之间的关系。它是两者之间非线性映射的度量。

重写内容:Gamma 校正对像素值应用幂律变换,调整强度值以校正非线性响应。重写内容:Gamma 校正的公式如下:

校正值 = 输入值 ^ (1 / 伽马)

这里,输入值代表原始像素值,校正值代表调整后的像素值。

重写内容:Gamma 校正的主要作用是补偿非线性强度关系,确保图像中的颜色和细节得到准确的表示。重写内容:Gamma 校正发挥重要作用的方式如下:

  • 亮度补偿:重写内容:Gamma 校正有助于弥补捕捉和显示设备之间亮度响应的差异。它确保显示图像中的感知亮度水平与原始场景一致。
  • 对比度增强:重写内容:Gamma 校正可以通过重新分配色调值来增强图像的对比度。根据伽马值的不同,它可以有效地强调图像的暗区域或亮区域中的细节。
  • 色彩准确性:重写内容:Gamma 校正有助于实现准确的颜色表示。通过调整伽马值,可以改善颜色再现,确保颜色看起来更自然且忠实于原始场景。
  • 色调映射:在高动态范围(HDR)成像中,重写内容:Gamma 校正常常作为色调映射技术的一部分,将场景的广泛动态范围映射到显示设备的有限动态范围。重写内容:Gamma 校正有助于保持阴影和高光区域的细节,防止信息丢失。
  • 感知一致性:重写内容:Gamma 校正旨在实现感知上一致的图像,其中显示的强度与人类视觉感知一致。通过校正非线性响应,重写内容:Gamma 校正确保图像对观众呈现出视觉上愉悦和逼真的效果。
import cv2import numpy as npimage_path = "cath.jpeg"def adjust_gamma(image, gamma):# Build a lookup table mapping the input pixel values to the corrected gamma valueslookup_table = np.array([((i / 255.0) ** gamma) * 255 for i in np.arange(0, 256)]).astype(np.uint8)# Apply gamma correction using the lookup tablegamma_corrected = cv2.LUT(image, lookup_table)return gamma_corrected# Load the imageimage = cv2.imread(image_path)# Adjust the gamma valuegamma_value = 1.5gamma_corrected = adjust_gamma(image, gamma_value)# Display the original and gamma-corrected imagescv2.imshow("Original", image)cv2.imshow("Gamma Corrected", gamma_corrected)cv2.waitKey(0)cv2.destroyAllWindows()

디지털 이미지 처리를 위한 이미지 조작

重写内容:Gamma 校正

几何变换

几何变换使图像的透视、方向和空间关系发生变化。这些变换为图像对齐、目标检测、图像注册等任务提供了基本工具。

(1) 平移

移动是几何变换的基本形式之一,它涉及将图像在水平或垂直方向上移动指定的距离

import cv2import numpy as npimage_path = "cath.jpeg"image = cv2.imread(image_path)# Define the translation matrixtx = 100# pixels to shift in the x-axisty = 50# pixels to shift in the y-axistranslation_matrix = np.float32([[1, 0, tx], [0, 1, ty]])# Apply translationtranslated_image = cv2.warpAffine(image, translation_matrix, (image.shape[1], image.shape[0]))# Display the original and translated imagescv2.imshow("Original", image)cv2.imshow("Translated", translated_image)cv2.waitKey(0)cv2.destroyAllWindows()

디지털 이미지 처리를 위한 이미지 조작

平移

(2) 缩放

缩放是指调整图像的大小,可以通过对所有维度应用统一的缩放因子,或者使用不同的缩放因子来调整不同的维度。已缩放。

# Define the scaling factorsscale_x = 1.5# scaling factor for the x-axisscale_y = 0.8# scaling factor for the y-axis# Apply scalingscaled_image = cv2.resize(image, None, fx=scale_x, fy=scale_y, interpolation=cv2.INTER_LINEAR)# Display the original and scaled imagescv2.imshow("Original", image)cv2.imshow("Scaled", scaled_image)cv2.waitKey(0)cv2.destroyAllWindows()

디지털 이미지 처리를 위한 이미지 조작

缩放

(3) 进行重写的内容是:旋转

进行重写的内容是:旋转是一种几何变换,涉及围绕中心点按指定角度更改图像的方向。

# Define the rotation angleangle = 30# Perform rotationrows, cols = image.shape[:2]rotation_matrix = cv2.getRotationMatrix2D((cols / 2, rows / 2), angle, 1)rotated_image = cv2.warpAffine(image, rotation_matrix, (cols, rows))# Display the original and rotated imagescv2.imshow("Original", image)cv2.imshow("Rotated", rotated_image)cv2.waitKey(0)cv2.destroyAllWindows()

디지털 이미지 처리를 위한 이미지 조작

进行重写的内容是:旋转

위 내용은 디지털 이미지 처리를 위한 이미지 조작의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제