Matlab求解三维数组中的最值问题

4.3
(3)

今天,有人问了一个图片灰度的问题。大体上,他要求解图片中RGB色彩的最小值。我们都知道图片是由三个二维数组组成的,即由RGB等三个二维矩阵组成。所以,我们只需要将这个三维数组分解成三个二维数组,然后分别求解这三个二维数组的最值问题即可。

Matlab求解三维数组中的最值问题

问题描述

下面,我们开始解决问题:

首先,我们需要读取图片,这里直接使用imread函数即可读取。然后,需要将这个三维矩阵分解成三个二维矩阵,可以使用(:,:,1)、(:,:,2)、(:,:,3),拆分成三个二维矩阵。然后就可以处理我们想解决的问题了。

刚开始,以为要求解RGB的三个二维矩阵中,RGB分别的最小值。这个问题,Matlab有函数处理,即min函数。之前,我们在Matlab求解最小值及最大值问题的文章,已经有过描述。

初次解决

大体上,可以使用如下代码实现:

%%
%清理工作区与命令区
clc
clear
close all
%%
%图片读取
I1 = imread('0827.jpg');
R=I1(:,:,1);
G=I1(:,:,2);
B=I1(:,:,3);
Rmin=min(min(R))
Gmin=min(min(G))
Bmin=min(min(B))

最终解决

后来发现不是求这个最值,而是求解每个像素点的RGB值中的最小值,即我们需要通过一个循环判断每个像素点上RGB三个值中最小的那个值,并将其存储位一个新的二维矩阵,下面直接上代码:

%%
%清理工作区与命令区
clc
clear
close all
%%
%图片读取
I1 = imread('0827.jpg');
figure(1)
imshow(I1)
I2 = rgb2gray(I1);
figure(2)
imshow(I2)
R=I1(:,:,1);
G=I1(:,:,2);
B=I1(:,:,3);
[i,j]=size(R);
for x=1:i;
    for y=1:j;
    RGB=[R(x,y),G(x,y),B(x,y)];
    temp(x,y)=min(RGB);
    end
end
temp;
figure(3)
imshow(temp)

上述代码中,我们使用imread将图片存储为一个三维矩阵,imshow显示了原图,使用rgb2gray将图片变为了灰度图,使用(:,:,1)、(:,:,2)、(:,:,3)将三维矩阵变为了三个二维矩阵,使用size求解了二维矩阵的行数及列数(即,一张图片的横向纵向像素个数),利用循环获取了每个像素点上三个RGB值得最小值,最后使用imshow输出这个新得图像。当然,我们也可以利用这种循环编辑一个新得公式,作为自己得灰度转换函数。

Matlab求解三维数组中的最值问题

这段代码中,需要注意小括号及中括号得不同。大体上,可以认为小括号为元素,中括号为矩阵。

共计3人评分,平均4.3

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/277.html

(1)
微信公众号
古哥的头像古哥管理团队
上一篇 2020年09月17日 20:40
下一篇 2020年10月08日 13:50

你可能感兴趣的文章

发表回复

登录后才能评论

评论列表(2条)

    微信小程序
    微信公众号