>  기사  >  기술 주변기기  >  Python 이미지 전처리에 대한 전체 가이드

Python 이미지 전처리에 대한 전체 가이드

WBOY
WBOY앞으로
2024-01-12 20:06:10542검색

머신러닝이나 컴퓨터 비전 프로젝트에서 품질이 낮은 이미지를 본 적이 있나요? 이미지는 많은 AI 시스템의 생명선이지만 모든 이미지가 동일하게 생성되는 것은 아닙니다. 모델을 훈련하거나 알고리즘을 실행하기 전에 일반적으로 최적의 결과를 얻으려면 일부 이미지 전처리가 필요합니다. Python의 이미지 전처리가 새로운 친구가 될 것입니다.

Python 이미지 전처리에 대한 전체 가이드

이 가이드에서는 Python을 사용하여 분석할 이미지를 준비하는 데 필요한 모든 팁과 요령을 배웁니다. 크기 조정 및 자르기부터 노이즈 감소 및 정규화에 이르기까지 모든 것을 다룹니다. 이 시점에서 이미지를 자세히 분석할 수 있습니다. OpenCV, Pillow 및 scikit-image와 같은 라이브러리의 도움으로 이미지를 즉시 향상시킬 수 있습니다. 그러니 준비하고 Python의 이미지 전처리 기술에 대한 완벽한 가이드를 살펴보세요!

이미지 전처리란 무엇이며 왜 중요한가요?

이미지 전처리는 원시 이미지 데이터를 사용 가능하고 의미 있는 형식으로 처리하는 프로세스입니다. 이는 불필요한 왜곡을 제거하고 컴퓨터 비전 애플리케이션에 필요한 특정 특성을 향상시키도록 설계되었습니다. 전처리는 이미지 데이터를 기계 학습 모델에 입력하기 전에 준비하는 중요한 첫 번째 단계입니다.

이미지 전처리에는 다음과 같은 여러 기술이 사용됩니다.

  • 크기 조정: 이미지 크기를 균일한 크기로 조정하는 것은 기계 학습 알고리즘이 제대로 작동하는 데 매우 중요합니다. OpenCV의 resize() 메소드를 사용하여 이미지 크기를 조정할 수 있습니다.
  • 회색조: 컬러 이미지를 회색조로 변환하면 이미지 데이터를 단순화하고 특정 알고리즘의 계산 요구 사항을 줄일 수 있습니다. cvtColor() 메서드를 사용하여 RGB를 회색조로 변환할 수 있습니다.
  • 노이즈 감소: 스무딩, 블러링 및 필터링 기술을 적용하여 이미지에서 불필요한 노이즈를 제거할 수 있습니다. GaussianBlur() 및 medianBlur() 메서드는 일반적으로 이 목적으로 사용됩니다.
  • 정규화: 정규화는 픽셀의 강도 값을 원하는 범위(보통 0과 1 사이)로 조정합니다. scikit-image의 Normalize()를 이러한 목적으로 사용할 수 있습니다.
  • 이진화: 임계값 처리를 통해 회색조 이미지를 흑백 이미지로 변환합니다. OpenCV에서는 이미지를 이진화하기 위해 Threshold() 메서드가 사용됩니다.
  • 대비 향상: 히스토그램 균등화를 사용하여 이미지의 대비를 조정할 수 있습니다. equalizeHist() 메서드는 이미지의 대비를 향상할 수 있습니다.

이러한 기술을 올바르게 조합하면 이미지 데이터를 크게 개선하고 더 나은 컴퓨터 비전 애플리케이션을 구축할 수 있습니다. 이미지 전처리는 원본 이미지를 문제 해결에 적합한 형식으로 변환하여 이미지 품질과 유용성을 향상시킵니다.

Python 라이브러리를 사용하여 이미지 로드 및 변환

이미지 처리에 Python을 사용하려면 이미지를 라이브러리에서 처리할 수 있는 형식으로 로드하고 변환하는 두 가지 인기 있는 옵션인 OpenCV와 Pillow가 있습니다.

OpenCV를 사용하여 이미지 로드: OpenCV는 PNG, JPG, TIFF 및 BMP 형식의 이미지를 로드할 수 있습니다. 다음 코드를 사용하여 이미지를 로드할 수 있습니다:

import cv2image = cv2.imread('path/to/image.jpg')

이렇게 하면 이미지가 NumPy 배열로 로드됩니다. 이미지가 BGR 색상 공간에 있으므로 RGB로 변환할 수 있습니다.

Pillow를 사용하여 이미지 로드: Pillow는 PIL(Python Image Library)의 친숙한 포크입니다. PSD, ICO, WEBP를 포함하여 OpenCV보다 더 많은 형식을 지원합니다. 다음 코드를 사용하여 이미지를 로드할 수 있습니다:

from PIL import Imageimage = Image.open('path/to/image.jpg')

이미지는 RGB 색상 공간에 있습니다.

색상 공간 간 변환: RGB, BGR, HSV 및 회색조와 같은 색상 공간 간 변환이 필요할 수 있습니다. 이는 OpenCV 또는 Pillow를 사용하여 수행할 수 있습니다. 예를 들어 OpenCV에서 BGR을 회색조로 변환하려면 다음을 사용할 수 있습니다.

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

또는 Pillow에서 RGB를 HSV로 변환하려면 다음을 사용할 수 있습니다.

image = image.convert('HSV')

이러한 기본 기술을 사용하면 다음과 같은 고급 기술로 이동할 수 있습니다. 크기 조정, 필터링, 가장자리 감지 등 가능성은 무궁무진합니다! 어떤 종류의 이미지 처리 프로젝트를 구축할 예정인가요?

调整大小和裁剪图像至标准尺寸

调整大小和裁剪图像是图像预处理的重要第一步。图像大小各异,但机器学习算法通常需要标准大小。您需要将图像调整大小和裁剪为方形尺寸,通常是224x224或256x256像素。在Python中,您可以使用OpenCV或Pillow库进行调整大小和裁剪。使用OpenCV,可以使用resize()函数。例如:

import cv2img = cv2.imread('original.jpg')resized = cv2.resize(img, (224, 224))

这将将图像调整为224x224像素。要将图像裁剪为正方形,可以计算中心正方形裁剪大小并使用OpenCV的crop()与中心坐标。例如:

height, width, _ = img.shapesize = min(height, width)x = (width size) // 2y = (height size) // 2cropped = img[y:y+size, x:x+size]

使用Pillow,您可以使用Image.open()和resize()函数。例如:

from PIL import Imageimg = Image.open('original.jpg')resized = img.resize((224, 224))

裁剪图像时,使用img.crop()。例如:

width, height = img.sizesize = min(width, height)left = (width size) / 2top = (height size) / 2right = (width + size) / 2bottom = (height + size) / 2cropped = img.crop((left, top, right, bottom))

调整大小和裁剪图像至标准尺寸是一个至关重要的第一步。这将使您的机器学习模型能够有效地处理图像,并提高结果的准确性。花时间仔细调整大小和裁剪图像,您的模型将感激不尽!

对像素值进行归一化以保持一致的亮度

在处理图像数据时,将像素值归一化以保持一致的亮度并提高对比度是很重要的。这使图像更适合进行分析,并使机器学习模型能够独立于光照条件学习模式。

像素值重新缩放:最常见的归一化技术是将像素值重新缩放到0到1的范围内。这是通过将所有像素除以最大像素值(RGB图像通常为255)来实现的。例如:

import cv2img = cv2.imread('image.jpg')normalized = img / 255.0

这将使所有像素在0到1之间缩放,其中0为黑色,1为白色。

直方图均衡化:另一种有用的技术是直方图均衡化。这将像素强度均匀分布到整个范围以提高对比度。可以使用OpenCV的equalizeHist()方法应用它:

eq_img = cv2.equalizeHist(img)

这对于像素值集中在一个狭窄范围内的低对比度图像效果很好。对于一些算法,将像素值归一化为零均值和单位方差是有用的。这可以通过减去均值并缩放到单位方差来实现:

mean, std = cv2.meanStdDev(img)std_img = (img mean) / std

这将使图像以零为中心,标准差为1。还有一些其他更复杂的归一化技术,但这三种方法——重新缩放为0-1范围、直方图均衡化和标准化——涵盖了基础知识,将为大多数机器学习应用准备好图像数据。确保对训练和测试数据都应用相同的归一化以获得最佳结果。

应用滤镜以减少噪声并锐化图像

一旦您在Python中加载了图像,就是时候开始增强它们了。图像滤镜用于减少噪声、增强细节,总体提高图像在分析之前的质量。以下是您需要了解的一些主要滤镜:

高斯模糊:

高斯模糊滤镜用于减少图像中的细节和噪声。它通过对每个像素及其周围像素应用高斯函数来“模糊”图像。这有助于在进行边缘检测或其他处理技术之前平滑边缘和细节。

中值模糊:

中值模糊滤镜用于从图像中去除椒盐噪声。它通过用其邻近像素的中值替换每个像素来工作。这有助于平滑孤立的嘈杂像素同时保留边缘。

拉普拉斯滤波器:

拉普拉斯滤波器用于检测图像中的边缘。它通过检测强度变化较快的区域来工作。输出将是突出显示边缘的图像,可用于边缘检测。这有助于识别和提取图像中的特征。

反向掩蔽:

反向掩蔽是一种用于增强图像中细节和边缘的技术。它通过从原始图像中减去模糊版本来实现。这会放大边缘和细节,使图像看起来更清晰。反向掩蔽可用于在特征提取或对象检测之前增强细节。

양측 필터:

양측 필터는 이미지를 부드럽게 하면서 가장자리를 보존합니다. 이는 픽셀의 공간적 근접성과 색상 유사성을 고려하여 수행됩니다. 공간적으로 가깝고 색상이 유사한 픽셀은 함께 부드럽게 처리되지만, 색상이 다른 픽셀은 부드럽게 처리되지 않습니다. 그 결과 가장자리가 선명하게 유지되는 부드러운 이미지가 생성됩니다. 양측 필터는 가장자리 감지 전 노이즈 감소에 유용합니다.

이러한 필터를 적용하면 심층 분석 및 컴퓨터 비전 작업에 사용할 수 있는 고품질의 향상된 이미지를 얻을 수 있습니다. 이를 시험해보고 이미지 처리 결과가 어떻게 향상되는지 확인하십시오!

분할을 사용하여 배경 감지 및 제거

이미지 배경 감지 및 제거는 많은 컴퓨터 비전 작업에서 중요한 전처리 단계입니다. 분할은 전경의 피사체를 배경에서 분리하여 피사체만 포함된 선명한 이미지를 제공합니다. OpenCV 및 scikit-image를 사용하여 Python에서 이미지 분할을 수행하는 몇 가지 일반적인 방법은 다음과 같습니다.

Thresholding:

Thresholding은 임계값을 선택하여 회색조 이미지를 이진 이미지(흑백)로 변환합니다. 임계값보다 어두운 픽셀은 검정색이 되고, 임계값보다 밝은 픽셀은 흰색이 됩니다. 이는 대비가 높고 조명이 균일한 이미지에 적합합니다. OpenCV의 Threshold() 메서드를 사용하여 임계값을 적용할 수 있습니다.

가장자리 감지:

가장자리 감지는 이미지에서 개체의 가장자리를 찾습니다. 가장자리를 연결하면 전경의 피사체를 분리할 수 있습니다. Canny 가장자리 감지기는 scikit-image의 canny() 메서드에 구현된 널리 사용되는 알고리즘입니다. low_threshold 및 high_threshold 매개변수를 조정하여 가장자리를 감지합니다.

지역 성장:

지역 성장은 일련의 시드 포인트에서 시작하여 바깥쪽으로 확장되어 이미지에서 연속적인 지역을 감지합니다. 시드 포인트를 제공하면 알고리즘이 인접 픽셀을 확인하여 해당 픽셀을 영역에 추가할지 여부를 결정합니다. 더 이상 픽셀을 추가할 수 없을 때까지 이 작업이 계속됩니다. skimage.segmentation.region_growing() 메서드는 이 기술을 구현합니다.

유역:

유역 알고리즘은 이미지를 지형 지도로 처리합니다. 고강도 픽셀은 봉우리를 나타내고 계곡 바닥은 지역 간 경계를 나타냅니다. 정상에서 흘러내려 서로 다른 지역이 만날 때 격리 장벽을 만듭니다. skimage.segmentation.watershed() 메서드는 유역 분할을 수행합니다.

이러한 기술을 시도하면 이미지에서 피사체를 분리할 수 있습니다. 분할은 컴퓨터 비전 모델을 이미지의 가장 중요한 부분인 전경 피사체에 집중할 수 있게 해주는 중요한 첫 번째 단계입니다.

데이터 증강을 사용하여 데이터 세트 확장

데이터 증강은 기존 이미지에서 새 이미지를 생성하여 데이터 세트의 크기를 인위적으로 확장하는 기술입니다. 이는 과적합을 줄이는 데 도움이 되고 모델의 일반화 성능을 향상시킵니다. 이미지 데이터에 대한 몇 가지 일반적인 향상 기술은 다음과 같습니다.

뒤집기 및 회전:

단순히 이미지를 뒤집거나(수평 또는 수직으로) 회전(90, 180, 270도)하면 새로운 데이터 포인트가 생성될 수 있습니다. 예를 들어 고양이 이미지 1,000개가 있고 가로로 뒤집고 세로로 뒤집고 90도 회전하면 총 4,000개의 이미지가 생성됩니다(원본 1,000개 + 가로 뒤집기 1,000개 + 세로 뒤집기 1,000개 + 90도 회전한 1,000개).

자르기:

이미지를 다양한 크기와 비율로 잘라 동일한 원본 이미지에서 새 이미지를 만듭니다. 이를 통해 모델은 동일한 콘텐츠의 다양한 구성과 조합을 볼 수 있습니다. 다양한 크기의 무작위 자르기를 만들거나 정사각형과 같은 보다 구체적인 자르기 비율을 대상으로 할 수 있습니다.

색상 조작:

밝기, 대비, 색조 및 채도를 조정하면 새롭고 향상된 이미지를 쉽게 만들 수 있습니다. 예를 들어, 이미지의 밝기와 대비를 최대 30%까지 무작위로 조정하여 새로운 데이터 포인트를 생성할 수 있습니다. 이미지를 너무 많이 왜곡하지 않도록 주의하십시오. 그렇지 않으면 모델이 혼동될 수 있습니다.

이미지 오버레이:

기존 이미지에 투명한 이미지, 질감 또는 노이즈를 오버레이하는 것도 또 다른 간단한 향상 기술입니다. 워터마크, 로고, 먼지/스크래치 또는 가우시안 노이즈 등을 추가하면 원본 데이터에 사실적인 변형을 만들 수 있습니다. 미묘한 오버레이로 시작하여 모델이 어떻게 반응하는지 확인하세요.

기술 결합:

데이터를 최대로 늘리려면 동일한 이미지에 여러 향상 기술을 결합할 수 있습니다. 예를 들어, 이미지의 색상을 뒤집고, 회전하고, 자르고, 조정하여 단일 원본 이미지에서 많은 새로운 데이터 포인트를 생성할 수 있습니다. 하지만 지나치게 강화하지 않도록 주의하세요. 그렇지 않으면 이미지가 인식되지 않을 수 있습니다!

데이터 증대를 사용하면 새 이미지를 수집하지 않고도 이미지 데이터 세트의 크기를 4배, 10배 이상으로 쉽게 늘릴 수 있습니다. 이는 과적합을 방지하고 훈련 시간과 비용을 일정하게 유지하면서 모델 정확도를 높이는 데 도움이 됩니다.

애플리케이션에 적합한 전처리 단계를 선택하세요

이미지 분석 프로젝트에 적합한 전처리 기술을 선택하는 것은 데이터와 목표에 따라 다릅니다. 몇 가지 일반적인 단계는 다음과 같습니다.

크기 조정:

이미지 크기를 일관된 크기로 조정하는 것은 기계 학습 알고리즘이 제대로 작동하는 데 중요합니다. 일반적으로 모든 이미지의 높이와 너비가 동일하고 일반적으로 28x28 또는 64x64 픽셀과 같이 더 작은 크기를 원합니다. OpenCV 또는 Pillow 라이브러리의 resize() 메서드를 사용하면 프로그래밍 방식으로 이 작업을 쉽게 수행할 수 있습니다.

색상 변환:

이미지를 회색조 또는 흑백으로 변환하여 분석을 단순화하고 노이즈를 줄입니다. OpenCV의 cvtColor() 메서드는 이미지를 RGB에서 회색조로 변환합니다. 흑백 이미지의 경우 임계값을 사용합니다.

노이즈 감소:

가우시안 블러, 중앙값 블러, 양측 필터링과 같은 기술은 노이즈를 줄이고 이미지를 부드럽게 할 수 있습니다. OpenCV의 GaussianBlur(), medianBlur() 및 biternalFilter() 메서드는 이러한 필터를 적용합니다.

정규화:

픽셀 값을 0~1 또는 -1~1의 표준 범위로 정규화하면 알고리즘이 더 잘 작동하는 데 도움이 됩니다. scikit-image의 Normalize() 메서드를 사용하여 이미지를 정규화할 수 있습니다.

대비 향상:

낮은 대비 이미지의 경우 히스토그램 균등화를 통해 대비를 향상할 수 있습니다. OpenCV의 equalizeHist() 메서드가 이 작업을 수행합니다.

가장자리 감지:

이미지의 가장자리나 윤곽을 찾는 것은 많은 컴퓨터 비전 작업에 유용합니다. OpenCV의 Canny() 메서드의 Canny 가장자리 감지기는 널리 사용되는 선택입니다.

핵심은 특정 요구 사항에 맞는 기술을 선택하는 것입니다. 크기 조정과 같은 기본 단계부터 시작한 다음 다양한 방법을 시도하여 품질을 개선하고 어떤 방법이 결과를 최적화하는지 확인하세요. 몇 가지 실험을 통해 이상적인 전처리 워크플로를 찾을 수 있습니다.

이미지 전처리 기술 FAQ

이제 Python의 다양한 이미지 전처리 기술을 잘 이해했지만 여전히 대답하지 못한 질문이 있을 수 있습니다. 다음은 이미지 전처리에 관해 가장 자주 묻는 질문과 답변입니다.

Python은 어떤 이미지 형식을 지원하나요?

Python은 OpenCV, Pillow 등의 라이브러리를 통해 다양한 이미지 형식을 지원합니다. 일부 주요 형식은 다음과 같습니다.

• JPEG — 일반적인 손실이 있는 이미지 형식

• PNG — 무손실 이미지 형식, 투명도가 있는 이미지에 적합

• TIFF — 무손실 이미지 형식, 높은 색심도 이미지에 적합

• BMP — 비압축 래스터 이미지 형식

언제 이미지 크기를 조정해야 합니까?

이미지 크기를 조정해야 하는 상황은 다음과 같습니다.

• 이미지가 너무 커서 효율적으로 처리할 수 없습니다. 크기를 줄이면 처리 속도가 빨라질 수 있습니다.

• 이미지는 기계 학습 모델의 입력 크기와 일치해야 합니다.

• 이미지는 화면이나 웹페이지에 특정 크기로 표시되어야 합니다.

일반적인 소음 감소 기술은 무엇입니까?

몇 가지 널리 사용되는 노이즈 감소 기술은 다음과 같습니다.

• 가우시안 흐림 — 가우시안 필터를 사용하여 이미지를 흐리게 하고 고주파 노이즈를 줄입니다.

• 中值模糊 — 用邻近像素的中值替换每个像素。对于去除椒盐噪声非常有效。

• 双边滤波器 — 在平滑图像的同时保留边缘。它可以去除噪声同时保持清晰的边缘。

OpenCV支持哪些颜色空间,如何在它们之间进行转换?

OpenCV支持RGB、HSV、LAB和灰度颜色空间。您可以使用cvtColor函数在这些颜色空间之间进行转换。例如:

将RGB转换为灰度:

gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

将RGB转换为HSV:

hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)

将RGB转换为LAB:

lab = cv2.cvtColor(img, cv2.COLOR_RGB2LAB)

将图像转换为不同的颜色空间对于某些计算机视觉任务(如阈值处理、边缘检测和目标跟踪)非常有用。

结论

这就是您所需要的,一个在Python中准备图像进行分析的完整指南。借助OpenCV和其他库的强大功能,您现在拥有调整大小、增强、过滤和转换图像的所有工具。随意尝试不同的技术,调整参数,找到最适合您特定数据集和计算机视觉任务的方法。图像预处理可能不是构建AI系统中最引人注目的部分,但它绝对是至关重要的。

위 내용은 Python 이미지 전처리에 대한 전체 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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