Python 기반의 이미지 향상 기술

王林
풀어 주다: 2023-08-30 22:05:10
원래의
1145명이 탐색했습니다.

몇 가지 이론적 용어로 이 튜토리얼을 시작하겠습니다. 이미지 향상에 관해 이야기할 때 이는 기본적으로 원본 이미지보다 더 적합한 새 버전의 이미지를 원한다는 의미입니다.

예를 들어 문서를 스캔할 때 출력 이미지의 품질이 원본 입력 이미지보다 낮을 수 있습니다. 따라서 출력 이미지의 품질을 향상시켜 보는 사람이 시각적으로 더 잘 표현할 수 있도록 하는 방법이 필요하며, 여기서 이미지 향상이 중요합니다. 이미지를 향상할 때 우리가 하는 일은 대비나 가장자리와 같은 이미지의 특징을 선명하게 하는 것입니다.

이미지 향상은 이미지의 정보 내용을 늘리는 것이 아니라 선택한 특징의 동적 범위를 늘려 궁극적으로 이미지 품질을 향상시킨다는 점에 유의해야 합니다. 따라서 여기서 우리는 실제로 출력 이미지가 어떻게 보일지 알 수 없지만 출력 이미지에서 더 자세한 내용을 관찰하는 등 개선 사항이 있는지 (주관적으로) 알 수 있어야 합니다.

이미지 향상은 디지털 이미지 처리(예: 분할, 표현)와 관련된 기본 단계 중 전처리 단계로 자주 사용됩니다. 이미지 향상을 위한 많은 기술이 있지만 이 튜토리얼에서는 Image InversePower Law Transformation이라는 두 가지 기술을 다루겠습니다. Python에서 이를 구현하는 방법을 살펴보겠습니다. 시작하자!

이미지 반전

이 섹션(이미지 반전이라고도 함)의 제목에서 짐작할 수 있듯이 이미지 반전의 목적은 입력 이미지의 어두운 강도를 이미지의 밝은 강도로 변환하는 것입니다. 출력 이미지의 밝은 강도와 ​​입력 이미지의 밝은 강도를 출력 이미지의 어두운 강도로 변환합니다. 즉, 어두운 부분은 더 밝아지고 밝은 부분은 더 어두워집니다.

I(i,j) 指的是位于 (i,j) 处的像素的强度值。这里澄清一下,灰度图像中的强度值落在 [0,255] 范围内,而 (i,j) 指的是行和列值, 分别。当我们对灰度图像应用图像逆运算符时,输出像素 O(i,j) 값은 다음과 같다고 가정합니다.

으아아아

이제 대부분의 이미지는 컬러입니다. 이러한 이미지에는 red, greenblue의 세 가지 채널이 포함되어 있으며 RGB 이미지라고 합니다. 이 경우 위 공식과 반대로 255에서 각 RGB 图像。在这种情况下,与上面的公式相反,我们需要从 255 中减去每个通道的强度。因此输出图像在像素 (i ,j) 채널의 강도를 빼야 합니다. 따라서 출력 이미지는 픽셀 단위입니다. (i ,j):

으아아아

소개에 이어 Python에서 이미지 역연산자를 구현하는 방법을 살펴보겠습니다. 단순화를 위해 이 연산자를 회색조 이미지에서 실행할 것임을 언급하고 싶습니다. 하지만 컬러 이미지에 이 연산자를 적용하는 방법에 대한 몇 가지 아이디어를 제공하고 전체 프로그램은 연습용으로 남겨 두겠습니다.

컬러 이미지의 경우 가장 먼저 해야 할 일은 각 픽셀 채널(예: RGB) 강도 값을 추출하는 것입니다. 이를 위해 PIL(Python Imaging Library)을 사용할 수 있습니다. 계속해서 baboon.png에서 샘플 개코원숭이 이미지를 다운로드하세요. 이미지의 크기는 500x500。假设您要提取位于像素位置 (325, 432) 의 빨간색, 녹색, 파란색 강도 값입니다. 이는 다음과 같이 수행할 수 있습니다:

으아아아

문서에 따르면 getpixel() 메소드는 다음을 수행합니다.

주어진 위치의 픽셀 값을 반환합니다.

위 스크립트를 실행하면 다음 결과만 얻을 수 있습니다. 138!但是三个通道的 (RGB) 强度值在哪里?问题似乎与正在读取的图像的 mode 정보. 다음 명령문을 실행하여 패턴을 확인하십시오.

으아아아

다음과 같은 P,这意味着图像是在调色板模式下读取的。您可以做的一件事是在返回不同通道的强度值之前将图像转换为 RGB 模式。为此,您可以使用 convert() 메소드의 출력을 얻게 됩니다.

으아아아

이 경우 다음과 같은 반환 값을 얻게 됩니다: (180, 168, 178). 이는 빨간색, 녹색, 파란색 채널의 강도 값이 각각 180, 168, 178임을 의미합니다.

지금까지 설명한 모든 내용을 종합하면 이미지의 RGB 값을 반환하는 Python 스크립트는 다음과 같습니다.

으아아아

이미지 역연산자로 넘어가기 전에 한 점이 더 남았습니다. 위의 예는 단 하나의 픽셀에 대한 RGB 값을 검색하는 방법을 보여 주지만 역연산을 수행할 때는 모든 픽셀에 대해 수행해야 합니다.

각 픽셀에 대해 서로 다른 채널의 모든 강도 값을 인쇄하려면 다음을 수행할 수 있습니다.

으아아아

이 시점에서는 각 픽셀의 모든 컬러 이미지 채널(예: RGB)에 이미지 역연산자를 적용하는 방법을 알아보기 위한 연습으로 남겨두겠습니다.

회색조 이미지에 이미지 역연산자를 적용하는 예를 살펴보겠습니다. 이 섹션에서 테스트 이미지 역할을 할 boat.png를 다운로드하세요. 다음과 같습니다:

Python 기반의 이미지 향상 기술

我将使用 numpy 库来完成此任务。在上面的图像上应用图像逆运算符的 Python 脚本应如下所示:

import cv2
import numpy as np
from PIL import Image
img = Image.open('boat.png')
array_img = np.array(img)
image_invert = np.invert(array_img)
cv2.imwrite('new_boat.jpg', image_invert)
로그인 후 복사

Numpy 是一个用于使用 Python 进行科学计算的 Python 包。 OpenCV-Python 是一个旨在解决计算机视觉问题的库。 OpenCV-Python 与 numpy 捆绑在一起,因此如果先安装 OpenCV-Python,则无需安装 numpy。我们首先用 Pillow 打开图像,然后将其转换为 numpy 数组。

然后我们使用numpy的invert()函数将图像反转并保存新的反转图像。 invert() 函数会将白色转换为黑色,反之亦然。

下面左边是原始图像,右边是新反转的图像。

Python 기반의 이미지 향상 기술

请注意,应用该运算符后,图像的某些特征变得更加清晰。例如,看看右侧图像中的云彩和灯塔。

幂律变换

这个算子,也称为伽马校正,是我们可以用来增强图像的另一个算子。让我们看看算子方程。在像素 (i,j) 处,运算符如下所示:

p(i,j) = kI(i,j)^gamma
로그인 후 복사

I(i,j) 是图像位置处的强度值 (i,j); kgamma 是正常数。我不会在这里讨论数学细节,但我相信您可以在图像处理书籍中找到该主题的详尽解释。但需要注意的是,在大多数情况下,k=1,所以我们主要是改变gamma的值。因此,上述方程可以简化为:

p(i,j) = I(i,j)^gamma
로그인 후 복사

我将在这里使用 OpenCVNumPy 库。如果您需要了解有关该库的更多信息,请查看我的教程 NumPy 简介。我们的测试图像将再次是boat.tiff(继续下载它)。

执行幂律变换运算符的 Python 脚本如下所示:

import cv2
import numpy as np

im = cv2.imread('boat.tiff')
im = im/255.0
im_power_law_transformation = cv2.pow(im,0.6)
cv2.imshow('Original Image',im)
cv2.imshow('Power Law Transformation',im_power_law_transformation)
cv2.waitKey(0)
로그인 후 복사

请注意,我们选择的 gamma 值是 0.6。下图显示了原始图像以及对该图像应用幂律变换算子的结果(左图为原始图像,右图为应用幂律变换算子后的结果)。

Python 기반의 이미지 향상 기술

上面的结果是 gamma = 0.6 时的结果。让我们看看当我们将 gamma 增加到 1.5 时会发生什么,例如:

Python 기반의 이미지 향상 기술

请注意,当我们增加伽马值时,图像会变得更暗,反之亦然。

您可能会问幂律变换有什么用处。事实上,用于图像采集、打印和显示的不同设备根据幂律变换算子进行响应。这是因为人脑使用伽马校正来处理图像。例如,当我们希望在计算机显示器或电视屏幕上正确显示图像(所有图像中显示最佳图像对比度)时,伽马校正就被认为很重要。

结论

在本教程中,您学习了如何使用 Python 增强图像。您已经了解了如何使用图像逆算子突出显示特征,以及如何将幂律变换视为在计算机显示器和电视屏幕上正确显示图像的关键算子。

위 내용은 Python 기반의 이미지 향상 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!