图像处理--颜色变换

图像处理
色盲患者的色觉系统的异常使他们无法区分某些不同的颜色,导致某些颜色无法分辨。电子产品中的图像是由不同颜色空间格式表示的颜色矩阵,通过对颜色矩阵处理可以实现颜色的替换。通过对患者容易混淆颜色的替换使之可以区分出无法分辨的颜色,以达到矫正的目的。
一,颜色替换策略算法
利用matlab中的rgb2ind函数将真彩色图像转换为索引图像,RGB图像一个像素点由三个分量表示,分别存储RGB颜色空间中的R,G,B分量的值;而索引图是由单个索引值和对应的调色板组成,将图片的颜色空间由rgb真彩图转换成索引图的格式,调用图片索引矩阵的调色板,通过对调色板颜色和对应索引的对应关系或者索引对应rgb值的改变实现对颜色的替换。
二,Matlab应用到android中
matlab函数和java:将图像处理函数的.m文件转化成jar包,供android端调用。这种方法要求运行机器上必须有MATLAB Runtime共享库,用于在未安装matlab的机器上运行matlab应用程序。这种方法适用于在android应用的服务器上使用。

function imgProc5(oriRGB,tarRGB,picUri,load)
%传进来图片和色盲类型参数,返回处理后的色盲图
%新思路:能否通过改变改变map中相应索引的所对应的值改变图像
   img=imread(picUri);     %将图片读入矩阵
[imgindex,map]=rgb2ind(img,256);
newmap=changeMap(oriRGB,tarRGB,map);
targetImg=ind2rgb(imgindex,newmap);
imwrite(targetImg,load,'quality',80);
end

function y=changeMap(oriRGB,tarRGB,map)
    %函数: 参数-需要替换的源RGB(oriRGB)和替换成目标RGB(tarRGB)以及图像矩阵的调色板map;
    %功能-实现调色板相应索引值得改变达到改变图像的目的;


     newtarRGB=roundn((double(tarRGB)/255),-1);
    [row,col]=size(oriRGB);
    for i=1:row

     arrIndex=getIndex(oriRGB(i,:),map);
     if arrIndex==0

     else
         l=length(arrIndex);
          for j=2:l
         map(arrIndex(j),:)=newtarRGB(i,:);
          end
     end
    end
y=map;
end
%-------------------
function index=getIndex(arrRGB,map)
%函数:颜色RGB一维arrRGB和颜色表map。返回arrRGB对应的map二维数组的索引
     I=[0];%记录匹配的索引
    newArrRGB=roundn((double(arrRGB)/255),-1);
    for i=1:1:256
        map_i=roundn((map(i,:)),-1);     
       if  newArrRGB==map_i
          I=[I i];
       end
    end
    index=I;
end

实现图片中部分颜色的替换

阅读更多
换一批

没有更多推荐了,返回首页