Matlab 编程 给定彩色图象 lena . bmp ,转换为灰度图象,进行三段非线性灰度变换,显示结果. 要求:灰度值较低的像素进行幂变换,提高其亮度;中间层级灰度的像素进行对数变换,系数为2,高亮度像素点保持不变
时间: 2023-08-02 15:06:15 浏览: 112
以下是 Matlab 代码实现:
```matlab
% 读入彩色图像
img = imread('lena.bmp');
% 转换为灰度图像
gray_img = rgb2gray(img);
% 计算灰度图像的大小
[rows, cols] = size(gray_img);
% 初始化输出图像
out_img = zeros(rows, cols);
% 对灰度值较低的像素进行幂变换
for i = 1:rows
for j = 1:cols
if gray_img(i, j) < 100
out_img(i, j) = 255 * (gray_img(i, j) / 255) ^ 0.5;
end
end
end
% 对中间层级灰度的像素进行对数变换,系数为2
for i = 1:rows
for j = 1:cols
if gray_img(i, j) >= 100 && gray_img(i, j) < 200
out_img(i, j) = 255 * log(1 + 2 * (gray_img(i, j) - 100)) / log(1 + 2 * 100);
end
end
end
% 高亮度像素点保持不变
for i = 1:rows
for j = 1:cols
if gray_img(i, j) >= 200
out_img(i, j) = gray_img(i, j);
end
end
end
% 显示结果
imshow(uint8(out_img));
```
其中,我们先读入 lena.bmp 彩色图像,然后使用 rgb2gray 函数将其转换为灰度图像。接着,我们对灰度值较低的像素进行幂变换,中间层级灰度的像素进行对数变换,系数为2,高亮度像素点保持不变。最后,我们将输出图像进行显示。
阅读全文