Remove white padding from image

8 次查看(过去 30 天)
I want to remove white padding from an image (see attachment). The size of the padding is random.
So I was thinking of reading in the image and then some looping to check if the entire row/column contains the value 255. However, looping is most of the time not the best way to do stuff. So I'm wondering if there's an easier way to do this, because I've found a similar question where the rows/columns contain 0, but I don't know if this can also be used for this case (with some adjustments).
Thanks in advance.

采纳的回答

Walter Roberson
Walter Roberson 2018-10-14
I = imread('test-image.jpg');
W = all(I == 255, 3);
maskc = all(W, 1);
maskr = all(W, 2);
J = I;
J(maskr,:,:) = 0;
J(:,maskc,:) = 0;
image(J)
  3 个评论
Walter Roberson
Walter Roberson 2018-10-14
"remove white padding" is ambiguous as to whether it should be transformed to a different color or cropped out of the image.
I = imread('test-image.jpg');
W = all(I == 255, 3);
maskc = ~all(W, 1);
maskr = ~all(W, 2);
J = I(maskr, maskc);
imshow(IM);
Nate Roberts
Nate Roberts 2020-4-1
This is exactly what I was looking for. I made a little script that can do this for an RBG image, assuming you only want to remove the padding, and not the white space within an image.
function im2 = removeWhitePadding(im1, dim)
if nargin<2
dim = 0;
end
WhitePixels = all(im1 == 255, 3);
maskr = ~all(WhitePixels, 2);
maskc = ~all(WhitePixels, 1);
if dim==1
im2 = im1(find(maskr, 1, 'first'):find(maskr, 1, 'last'),:,:);
elseif dim==2
im2 = im1(:,find(maskc, 1, 'first'):find(maskc, 1, 'last'),:);
else
im2 = im1(find(maskr, 1, 'first'):find(maskr, 1, 'last'),find(maskc, 1, 'first'):find(maskc, 1, 'last'),:);
end
end

请先登录,再进行评论。

更多回答(1 个)

Image Analyst
Image Analyst 2018-10-14
Try this:
rgbImage = imread('test-image.jpg');
subplot(2, 2, 1);
imshow(rgbImage);
title('Original RGB Image', 'FontSize', 20);
axis('on', 'image');
nonWhitePixels = any(rgbImage ~= 255, 3);
subplot(2, 2, 2);
imshow(nonWhitePixels)
title('Non-white Pixels Mask', 'FontSize', 20);
axis('on', 'image');
[maskRows, maskColumns] = find(nonWhitePixels);
% Crop image
croppedImage = rgbImage(min(maskRows):max(maskRows), min(maskColumns):max(maskColumns), :);
subplot(2, 2, 3);
imshow(croppedImage);
axis('on', 'image');
title('Cropped RGB Image', 'FontSize', 20);

类别

Help CenterFile Exchange 中查找有关 Images 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by