1、问题提出
读取RGB彩色图像,将红色分量,绿色分量。蓝色分量提取出来,分别进行如下变化:像素值小于100的改为0,像素值大于200的改成255,其他像素值乘以2再减去60,然后进行各分量的组合得到新的图像。
2、程序编写:
本程序主要运用for循环语句,和一些基本的函数库:imread(读取图片)、cat(进行RGB各分量的组合)、imshow(绘制图像)。采用的图片为RGB彩色图片,像素大小为512×480,文件命名frutis.jpg,如下:
(1)RGB分量的读取
%读取分量
rgb_image=imread('fruits.jpg');%读取图片
fR=rgb_image(:, :, 1);%读取红色分量
fG=rgb_image(:, :, 2);%读取绿色分量
fB=rgb_image(:, :, 3);%读取蓝色分量
(2)RGB分量的变换
%对红色分量进行变换
fR2=double(fR);%转换为双精度浮点类型
for i=1:1:480
for j=1:1:512 %遍历
if(fR2(i,j)<100)
fR2(i,j)=0; %像素小于100的等于0
elseif(fR2(i,j)>200)
fR2(i,j)=255; %像素大于200的等于255
else
fR2(i,j)=2.*fR2(i,j)-60;%其他的像素点乘以2倍再减60
end
end
end
fR2=uint8(fR2);%强制将数据转换为8位无符号整数
%对绿色分量进行变换
fG2=double(fG);%转换为双精度浮点类型
for i=1:1:480
for j=1:1:512 %遍历
if(fG2(i,j)<100)
fG2(i,j)=0; %小于100的等于0
elseif(fG2(i,j)>200)
fG2(i,j)=255; %大于200的等于255
else
fG2(i,j)=2.*fG2(i,j)-60;%其他的像素点乘以2倍再减60
end
end
end
fG2=uint8(fG2);%强制将数据转换为8位无符号整数
%对蓝色分量进行变换
fB2=double(fB);%转换为双精度浮点类型
for i=1:1:480
for j=1:1:512 %遍历
if(fB2(i,j)<100)
fB2(i,j)=0; %像素小于100的等于0
elseif(fB2(i,j)>200)
fRB2(i,j)=255; %像素大于200的等于255
else
fB2(i,j)=2.*fB2(i,j)-60;%其他的像素点乘以2倍再减60
end
end
end
fR2=uint8(fR2);%强制将数据转换为8位无符号整数
(3)RGB分量的组合
%组合变换后的图像
rgb_1=cat(3,fR2,fG2,fB2);%利用变换后的各分量进行图像的组合
(4)绘制命令
%显示图像
figure(1)
subplot(231);imshow(fR);title('原始红色分量');
subplot(234);imshow(fR2);title('变换后红色分量');
subplot(232);imshow(fG);title('原始绿色分量');
subplot(235);imshow(fG2);title('变换后绿色分量');
subplot(233);imshow(fB);title('原始蓝色分量');
subplot(236);imshow(fB2);title('变换后蓝色分量');
figure(2)
subplot(121);imshow(rgb_image);title('原始图像');
subplot(122);imshow(rgb_1);title('重新组合后图像');
3、运行结果
最后:
如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真…希望能帮到你!