Matlab 编程 给定彩色图象 lena . bmp ,转换为灰度图象,进行三段非线性灰度变换,显示结果. 要求:灰度值较低的像素进行幂变换,提高其亮度;中间层级灰度的像素进行对数变换,系数为2
时间: 2023-08-02 07:06:15 浏览: 112
MATLAB非线性灰度图像变换
5星 · 资源好评率100%
首先,读取彩色图像并转换为灰度图像:
```matlab
lena = imread('lena.bmp'); % 读取彩色图像
gray_lena = rgb2gray(lena); % 转换为灰度图像
```
然后,进行三段非线性灰度变换,其中灰度值较低的像素进行幂变换,中间层级灰度的像素进行对数变换,系数为2:
```matlab
% 灰度值较低的像素进行幂变换
low_gray = gray_lena < 128; % 获取灰度值小于128的像素
gray_low = gray_lena .^ 0.5; % 进行幂变换,提高亮度
gray_low(low_gray) = gray_lena(low_gray); % 将低灰度像素的原始灰度值赋值回去
% 中间层级灰度的像素进行对数变换,系数为2
mid_gray = (gray_lena >= 128) & (gray_lena < 192); % 获取灰度值在128到192之间的像素
gray_mid = log(double(gray_lena) + 1) .* 2; % 进行对数变换,并乘以2
gray_mid(~mid_gray) = gray_lena(~mid_gray); % 将非中间层级灰度的像素的原始灰度值赋值回去
% 灰度值较高的像素进行幂变换
high_gray = gray_lena >= 192; % 获取灰度值大于等于192的像素
gray_high = gray_lena .^ 0.8; % 进行幂变换,提高亮度
gray_high(~high_gray) = gray_lena(~high_gray); % 将高灰度像素的原始灰度值赋值回去
```
最后,显示结果:
```matlab
% 显示原图和三段非线性灰度变换后的图像
figure;
subplot(2, 2, 1); imshow(gray_lena); title('Original Image');
subplot(2, 2, 2); imshow(gray_low); title('Low Gray Levels');
subplot(2, 2, 3); imshow(gray_mid); title('Middle Gray Levels');
subplot(2, 2, 4); imshow(gray_high); title('High Gray Levels');
```
阅读全文