如何在matlab中使每个第二像素灰度在图像中

时间:2016-03-14 22:41:30

标签: matlab image-processing

我在matlab中有一个图像。我试图让每个第二个像素变灰。有人会知道怎么做吗?

example image

2 个答案:

答案 0 :(得分:1)

1)阅读图片:

rgbImage = imread('photo.jpg');

2)转换为单元格数组,其中每个元素代表一个像素,但是1x1x3 uint8 rgb triplet:

cellArray = mat2cell(rgbImage, ones(size(rgbImage,1),1), ones(size(rgbImage,2),1), size(rgbImage,3));

3)用灰色替换每个第二个细胞。请注意,我们需要保留原始类型和维度,否则以下cell2mat调用将失败:

cellArray(1:2:end) = {reshape(uint8([255,255,255]*0.1), [1,1,3])};

4)转换回矩阵并显示:

imageGray = cell2mat(cellArray);
imshow(imageGray);

编辑 棋盘

如果您希望将图像彩色为棋盘格,无论图像尺寸如何,步骤3 都可以替换为:

linInd = 1:numel(cellArray);
[i,j] = ind2sub(size(cellArray), linInd);
toColor = mod(i+j,2) == 0;
cellArray(linInd(toColor)) = {reshape(uint8([255,255,255]*0.1), [1,1,3])};

基本上我们只为那些细胞着色,而i + j是偶数。

答案 1 :(得分:0)

创建棋盘图案的最简单方法可能是创建一个矩形网格(ndgrid),然后使用mod查找列和行索引总和为偶数的所有元素。

TabItem tb = _tabcntrl.SelectedItem;
var childControls = control.Children.OfType<UserControl>(); // your controltype

// I'm looping through all child controls of type 'UserControl' but you can customize to your case.

foreach(var control in childControls)
{
     // execute control logic here
     control.test();
}

创建同一逻辑sz = size(rgbImage); [row, col] = ndgrid(1:sz(1), 1:sz(2)); checkers = logical(mod(row + col, 2)); 矩阵的另一种方法是使用bsxfun,这将大大减少先前操作所消耗的内存。

checkers

enter image description here

现在我们只需要使用这个逻辑矩阵索引到checkers = bsxfun(@(x,y)mod(x + y, 2), 1:size(rgbImage, 1), (1:size(rgbImage, 2)).').'; 并将相关值设置为灰色(128)。一种简单的方法是展平rgbImage的第一维,以便我们可以使用逻辑矩阵rgbImage直接索引它们。

checkers

enter image description here

<强>更新

如果您想将此棋盘图案应用于原始reshaped_image = reshape(rgbImage, [], 3); % Flatten first two dims reshaped_image(checkers, :) = 128; % Set all channels to 128 newImage = reshape(reshaped_image, size(rgbImage)); % Shape it back into original 的白色部分,您绝对可以这样做。为此,您需要创建一个逻辑矩阵,指示白色像素的位置。然后你想找到棋盘图案的位置AND(rgbImage),其中像素为白色。

&

然后以相同的方式应用此模式。

isWhite = all(rgbImage == 255, 3);     % White pixels where all channels = 255
tochecker = checkers & isWhite;        % Combine with checkerboard

如果我们将此应用于您帖子中的图片,我们会收到以下内容

enter image description here