Heim > Technologie-Peripheriegeräte > KI > Bildmanipulation für die digitale Bildverarbeitung

Bildmanipulation für die digitale Bildverarbeitung

PHPz
Freigeben: 2023-12-14 17:46:03
nach vorne
1631 Leute haben es durchsucht

Bei der Computer Vision und Bildverarbeitung spielt die Bildmanipulation eine entscheidende Rolle. Diese Vorgänge sind für Aufgaben wie die Vorverarbeitung, die Verbesserung der Bildqualität und die Aktivierung erweiterter Algorithmen von entscheidender Bedeutung. Im Bereich Computer Vision sind Vorgänge wie Größenänderung, Zuschneiden, Anpassen von Helligkeit/Kontrast/Gamma und geometrische Transformationen grundlegende Vorgänge. Sie ermöglichen eine effiziente Berechnung, Extraktion relevanter Regionen, Normalisierung von Bildintensitäten und geometrische Kalibrierung. In Bezug auf die Bildverarbeitung sind diese Vorgänge auch von entscheidender Bedeutung für das Downsampling, das Zuschneiden irrelevanter Bereiche, die Verbesserung der Sichtbarkeit und Qualität und die Durchführung geometrischer Operationen B. das Anpassen eines Bildes an eine bestimmte Größe oder das Reduzieren der Dateigröße. Bildinterpolation und Resampling sind Techniken, die in der Bildverarbeitung und Computer Vision verwendet werden, um die Größe oder Skalierung von Bildern zu ändern.

Bildmanipulation für die digitale Bildverarbeitung

Bildinterpolation

Bildinterpolation bezieht sich auf den Prozess der Schätzung von Pixelwerten an unbekannten Stellen in einem Bild basierend auf bekannten Pixelwerten. Verschiedene Interpolationsmethoden verwenden unterschiedliche Methoden, um den Wert unbekannter Pixel zu schätzen

wie folgt umgeschrieben: Die Interpolation des nächsten Nachbarn ist eine Methode, um den Wert einer unbekannten Pixelposition dem Wert des nächstgelegenen bekannten Pixels zuzuordnen. Obwohl diese Methode einfach ist, kann sie zu Problemen mit blockierenden Artefakten und Detailverlust führen unbekannte Pixel durch gewichtete Mittelung. Die bilineare Interpolation ist in der Lage, glattere Ergebnisse zu liefern als die Interpolation mit dem nächsten Nachbarn, kann jedoch dennoch zu einigen Unschärfeeffekten führen.

Die bikubische Interpolation wird erweitert, indem mehr benachbarte Pixel berücksichtigt werden und ein kubisches Polynom verwendet wird, um die Pixelwerte der bilinearen Interpolation zu schätzen. Diese Methode kann qualitativ hochwertigere Ergebnisse mit sanfteren Übergängen und einer besseren Erhaltung der Bilddetails liefern.

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)
Nach dem Login kopieren

ZuschneidenBildmanipulation für die digitale Bildverarbeitung

Der Zweck des Zuschneidens eines Bildes besteht darin, unerwünschte Inhalte zu entfernen oder sich auf einen bestimmten Interessenbereich zu konzentrieren. Durch Zuschneiden können Sie Ihre Komposition optimieren, Ablenkungen entfernen und wichtige Elemente Ihres Bildes hervorheben. Durch das Entfernen unnötiger oder irrelevanter Teile entsteht ein optisch ansprechendes und wirkungsvolles Bild, das die beabsichtigte Botschaft oder das beabsichtigte Thema effektiv vermittelt.

Verschiedene Methoden können verwendet werden, um den Zuschneidebereich zu bestimmen:

Manuelle Auswahl: Beim manuellen Zuschneiden erfolgt eine visuelle Inspektion des Bildes und die Auswahl des gewünschten Bereichs, der beibehalten werden soll. Dieser Ansatz bietet Flexibilität und ermöglicht es, subjektive Entscheidungen auf der Grundlage des künstlerischen Urteils des Fotografen oder Designers zu treffen.

Objekterkennung: Die auf Objekterkennungsalgorithmen basierende automatische Zuschneidetechnologie kann bestimmte Objekte oder Motive in Bildern identifizieren und extrahieren. Diese Algorithmen analysieren Bilder und lokalisieren Objekte anhand vordefinierter Muster oder trainierter Modelle. Erkannte Objekte können als Zuschneidebereiche verwendet werden, um sicherzustellen, dass wichtige Elemente erhalten bleiben, während irrelevante Hintergrund- oder Umgebungsbereiche entfernt werden.

Segmentierung: Bilder können mithilfe von Bildsegmentierungstechniken wie semantischer Segmentierung oder Instanzsegmentierung in sinnvolle Bereiche unterteilt werden. Diese Techniken weisen verschiedenen Objekten oder Regionen Beschriftungen oder Masken zu und ermöglichen so das Zuschneiden bestimmter Teile oder das Isolieren bestimmter Interessenbereiche. Bildmanipulation für die digitale Bildverarbeitung

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()
Nach dem Login kopieren

Anpassung

Helligkeit und Kontrast:

Die Anpassung von Helligkeit und Kontrast ist wichtig, um die Sichtbarkeit Ihres Bildes zu verbessern und seine visuelle Attraktivität zu verbessern. Durch Anpassen der Helligkeit kann ein Bild heller oder dunkler erscheinen und Details in unter- oder überbelichteten Bereichen hervorgehoben werden. Die Kontrastanpassung verbessert die Unterscheidung zwischen hellen und dunklen Bereichen und lässt Bilder klarer und dynamischer erscheinen.

  • Durch Anpassen von Helligkeit und Kontrast können Sie die Gesamtqualität und Lesbarkeit des Bildes verbessern und sicherstellen, dass wichtige Merkmale deutlich sichtbar sind
  • 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()
    Nach dem Login kopieren

Ein Histogramm ist ein Diagramm, das die Verteilung von Daten zeigt . Es unterteilt die Daten in mehrere Intervalle, zählt die Anzahl der Daten in jedem Intervall und zeichnet dann vertikale Balken, um die Anzahl der Daten in jedem Intervall darzustellen. Histogramme können uns helfen, die Verteilungsmerkmale von Daten, wie etwa den Grad der Datenkonzentration, die Schiefe und das Vorhandensein von Ausreißern, intuitiv zu verstehen. Durch die Betrachtung von Histogrammen können wir die Daten besser verstehen und analysieren, um genauere Entscheidungen und Vorhersagen zu treffen. In der Statistik, Marktforschung, Finanzanalyse und anderen Bereichen werden Histogramme häufig zur Datenanalyse und zum visuellen Ausgleich verwendet

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

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

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()
Nach dem Login kopieren

Bildmanipulation für die digitale Bildverarbeitung

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

# 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()
Nach dem Login kopieren

Bildmanipulation für die digitale Bildverarbeitung

均衡化图像

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

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

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

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()
Nach dem Login kopieren

Bildmanipulation für die digitale Bildverarbeitung

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

重写内容: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()
Nach dem Login kopieren

Bildmanipulation für die digitale Bildverarbeitung

重写内容: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()
Nach dem Login kopieren

Bildmanipulation für die digitale Bildverarbeitung

平移

(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()
Nach dem Login kopieren

Bildmanipulation für die digitale Bildverarbeitung

缩放

(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()
Nach dem Login kopieren

Bildmanipulation für die digitale Bildverarbeitung

进行重写的内容是:旋转

Das obige ist der detaillierte Inhalt vonBildmanipulation für die digitale Bildverarbeitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage