matlab对图像进行gamma变换_灰度图像处理中对数变换和Gamma变换有什么区别又该如何选择?...

对数变换

可以拉伸范围较窄的低灰度值,同时压缩范围较宽的高灰度值。可以用来扩展图像中的暗像素值,同时压缩亮像素值。

简而言之是对图像中低灰度细节进行增强

equation?tex=s%3Dc+%5Clog%28l%2Br%29

其中

equation?tex=c 为常数,

equation?tex=r%5Cin%5B0%2C1%5D ,

equation?tex=r%2B1 可以使函数左移一个单位,得到的s均大于0。

'''对数变换'''

import numpy as np

import matplotlib.pyplot as plt

import cv2

def log_plot(c):

x = np.arange(0, 256, 0.01)

y = c*np.log(1 + x)

plt.plot(x, y, 'r', linewidth=1)

plt.title('对数变换函数')

plt.xlim(0, 255), plt.ylim(0, 255)

plt.show()

def log(c, img):

output_img = c*np.log(1.0+img)

output_img = np.uint8(output_img+0.5)

return output_img

img_input = cv2.imread('FilePath')

cv2.imshow('input', img_input)

log_plot(42)

img_output = log(42, img_input)

cv2.imshow('output', img_output)

cv2.waitKey(0)

cv2.destroyAllWindows()

Gamma校正

该函数多用在图像整体偏暗,扩展灰度级。另外一种情况是,图像有“冲淡”的外观(很亮白)需要压缩中高以下的大部分的灰度级。

简而言之是整体灰度值进行改变。

equation?tex=s%3Dcr%5E%5Cgamma

其中

equation?tex=c%E5%92%8C%5Cgamma 为符号为正的常数。

equation?tex=c 作为常数通常情况取1,输入输出情况下范围一般为

equation?tex=%5B0%2C1%5D .

如果

equation?tex=%5Cgamma%3E1 ,光照强度增强,称为gamma compression。

如果

equation?tex=%5Cgamma%3C1 ,光照强度减弱,称为gamma expansion。

'''Gamma校正'''

import numpy as np

import matplotlib.pyplot as plt

import cv2

def gamma_plot(c, v):

x = np.arange(0, 256, 0.01)

y = c*x**v

plt.plot(x, y, 'r', linewidth=1)

plt.title('伽马变换函数')

plt.xlim([0, 255]), plt.ylim([0, 255])

plt.show()

def gamma(img, c, v):

lut = np.zeros(256, dtype=np.float32)

for i in range(256):

lut[i] = c * i ** v

output_img = cv2.LUT(img, lut)

output_img = np.uint8(output_img+0.5)

return output_img

img_input = cv2.imread('FilePath', cv2.IMREAD_GRAYSCALE)

cv2.imshow('imput', img_input)

gamma_plot(0.00000005, 4.0)

img_output = gamma(img_input, 0.00000005, 4.0)

cv2.imshow('output', img_output)

cv2.waitKey(0)

cv2.destroyAllWindows()

附上py3代码及matlab代码

% i0为图像数据:

% i1 = log(i+1);%对数变换,只能处理double类型值;

% i1 = imadjust(i,[lin,hin],[lout,hout],r); gamma变换,[] 中可以定义范围,范围外的被裁剪掉,可缺省,r为gamma值;

% i1 = im2bw(i,level); 阈值变换,level为阈值0-1;

% thresh = graythresh(i); 自动确定阈值0-1;

% i1 = im2bw(i,thresh); 利用上面的阈值处理,其中tresh为阈值取[0,1]

i0 = imread('FilePath');

i0 = im2double(i0);

i1 = log(i0+1);

i2 = imadjust(i,[],[],3);

i3 = im2bw(i0,0.3);

thresh = graythresh(i);

i4 = im2bw(i,thresh);

subplot(1,5,1); imshow(i0);

subplot(1,5,2); imshow(i);

subplot(1,5,3); imshow(i2);

subplot(1,5,4); imshow(i3);

subplot(1,5,5); imshow(i4);

相关资源:matlab图形幂次变换
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页