2 sinat 22822467 sinat_22822467 于 2015.07.22 22:09 提问

已知一副彩色图像,求出RGB三通道的灰度值,在对其做变换后,怎么将RGB三通道恢复为彩色图像

求大神帮忙,已知一副彩色图像,先求出RGB各灰度值,然后各灰度值各加一定的数值,怎么合成一副彩色图像。
如果有matlab其它方法可以实现将一副彩色图像的各灰度值加一定的数值,再合成一副图像也可以。

 clear;
clc;
f=imread('fruit.jpg');
[m,n,p]=size(f);   %对于二维数组来说,它的size是指它的行数和列数;三维数组是指它的各个维的维度,可以理解为m行,n列和p层,即一共有m*n*p个元素
a=zeros(1,256);  %a为一个1行,256列的全0矩阵
b=zeros(1,256);
c=zeros(1,256);

for i=1:m     %从行开始 
    for j=1:n  %每一行的列
        a(f(i,j,1)+1)=a(f(i,j,1)+1)+1;  %f(i,j,1)是红色通道的值,这个值有0-255的取值,a数组正好是容量256的数组,数组的下标范围是1开始的,所以要加1
    end
end
for i=1:m
    for j=1:n
        b(f(i,j,2)+1)=b(f(i,j,2)+1)+1;%G通道
    end
end

for i=1:m
    for j=1:n
        c(f(i,j,3)+1)=c(f(i,j,3)+1)+1;%B通道
    end
end
%各灰度分量加20;
for k=1:256
    a(k)=a(k)+20;
    b(k)=b(k)+20;
    c(k)=c(k)+20;
end

怎么合成?

6个回答

mylmuseum
mylmuseum   2015.07.24 14:55
已采纳

f=imread('fruit.jpg');如果你读入的图像就是三个通道的,那个f(:,:,1)、f(:,:,2)、f(:,:,3)就是三个通道的数据啊,f(:,:,1)=f(:,:,1)+10,就可以了。
这样f就是彩色图片,不知道是不是你要的回答?很多时候,灰度值需要限幅的

sinat_22822467
sinat_22822467 说的很对,让我一下子明白了,谢谢了哦!
2 年多之前 回复
Evankaka
Evankaka   Ds   Rxr 2015.07.23 19:57

我以前做过,用matlab分别提取三个通道的值,然后做运算后再重新合成。只不过重新合成的一直不好看
RGB图像是一个M*N*3的3维矩阵组成的图像。

简单的说cat函数的主要功能是合成矩阵:

cat(1,A,B):合成1维矩阵。

cat(2,A,B):合成2维矩阵。

cat(3,A,B,C):合成3维矩阵。

cat(dim,Y0,Y1,Y2,Y3...............)

是按dim的位数来合成矩阵。

对图像生成而言,取dim=3,然后将3个分别代表RGB分量的矩阵连接在一起:

photo=cat(3,red,green,blue)

caozhy
caozhy   Ds   Rxr 2015.07.22 22:27
sinat_22822467
sinat_22822467 我的RGB三通道是矩阵的形式,怎么恢复为一副彩色图像啊,他那个txt是文本文档吗?
2 年多之前 回复
wangyaninglm
wangyaninglm   Ds   Rxr 2015.07.23 09:02

就是各个通道分别加上去,要是超过数值了,就从新从零开始加

ctt001
ctt001   2015.07.23 11:29

通过插值算法得到,有好几种插值算法,你可以百度下

sina_2831808769
sina_2831808769   Rxr 2015.07.25 13:50

f=imread('fruit.jpg');如果你读入的图像就是三个通道的,那个f(:,:,1)、f(:,:,2)、f(:,:,3)就是三个通道的数据啊,f(:,:,1)=f(:,:,1)+10,就可以了。
这样f就是彩色图片,不知道是不是你要的回答?很多时候,灰度值需要限幅的

Csdn user default icon
上传中...
上传图片
插入图片