RGB图片像素点随机化——Matlab实现

在分析照片各个区域的色度、亮度平均值时,为了使每行/每列/整体的像素点特征分布均匀以加快分析速度、减小误差时,这时候就要对像素点进行随机化操作,也就是洗牌。

用Matlab来完成此任务再合适不过了。对于RGB类型的彩色图片,它在Matlab中本质上是个三维矩阵,这个三维数组有三个面,依次对应于红(Red)、绿(Green)、蓝(Blue)三种颜色,而面中的数据则分别是这三种颜色的强度值,面中的元素对应于图像中的像素点。设所得矩阵为X三维矩阵(height,width,3) ,X(:,:,1)代表红色的二维矩阵 X(:,:,2)代表绿色的二维矩阵, X(:,:,3)代表蓝色的二维矩阵。

那么这里用到两个Matlab内置函数:一个是randperm(x),产生1~x的随机序列并作为行向量,输入原图像中要进行转置操作才可以;另一个是size(a,n),n=1时求矩阵a的行数,n=2时求矩阵a的列数。下面直接上代码:

clc; % 
close all;
[a,b] = uigetfile({'*.jpg';'*.png'},'Please select an image'); % open file choice dialog

if ~(a == 0)
    img = imread(strcat(b,a));
    img0(1:size(img,1),1:size(img,2),:)=img(randperm(size(img,1))',randperm(size(img,2))',:); % shuffle both
    img1(:,1:size(img,2),:)=img(:,randperm(size(img,2))',:); % shuffle columns
    img2(1:size(img,1),:,:)=img(randperm(size(img,1))',:,:); % shuffle lines
    imwrite(img0, strcat('0_', a));
    imwrite(img1, strcat('1_', a));
    imwrite(img2, strcat('2_', a));
end

其中img0是行、列都随机化(如下图右上角所示),img1只随机化列(如下图左下角所示),img2只随机化行(如下图右下角所示),效果如下:

当然缺点也很明显, 处理分辨率过高的图片时工作区内存会不足,而且对于索引等类型的图片需要转为RGB以后才能使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值