Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

How can i slip and rotate a color image?

Asked by Carole on 28 Nov 2012

Hi,how can i slip and rotate the color image img like the binary image bw?

I=imread('image.jpg'); %color image
bw=segmentation(I); % the result is a binary image where the object detected (ROI) is white
img = bsxfun(@times, I, cast(bw,class(I)));
phy = regionprops(bw, 'Orientation')
[barx,bary]=barycentre(edge);
% slip the region to the center of the image
edge = recentre(edge,barx,bary);
I2 = recentre(bw,barx,bary);
phy1=phy.Orientation;
edge=imrotate(edge,-phy,'loose');
I3=imrotate(I2,-phy,'loose');

thanks

4 Comments

Sean de Wolski on 28 Nov 2012

Why isn't imrotate working for you?

For more fancy transformations, look into imtransform.

Carole on 28 Nov 2012

The function recenter and imrotate work with the binary image bw where the ROI is centred and rotated very well but when i want to center and rotate the ROI of the color image img it doesn't work :( . I couldn't use imtransform to center the region and rotate the image with a given angle -phy

yagnesh on 29 Nov 2012

use imrotate after separating rgb planes and after that combine those 3 planes

Carole

Products

No products are associated with this question.

2 Answers

Answer by Image Analyst on 29 Nov 2012
Accepted answer

Have you tried circshift() to slide the image over?

7 Comments

Image Analyst on 30 Nov 2012

Okay - I've edited it for you to let the user click on a point that she wants to move to the center of the image. Show the older comments above to get the edited code. Let me know if that works for you. With circshift, the edge of the image wraps around, which should not be a problem if it's black. If you want the stuff shifted out of the image to be cut off and the stuff shifted in to be black (instead of from the opposite side of the image) then it's an easy adaptation that you can do.

Carole on 1 Dec 2012

thanks it works with some modifications knowing that I want to move the centroid of the object to the center of the image

Image Analyst on 1 Dec 2012

OK great. Go ahead and mark it as "Answered" then.

Image Analyst
Answer by Sean de Wolski on 28 Nov 2012

imrotate can rotate color images just fine:

imshow(imrotate(imread('peppers.png'),42,'crop'))

2 Comments

Carole on 29 Nov 2012

It seems that the problem is in the function recentre because it works with the binary image bw but it doesn't work with the color image img

I=imread('image.jpg'); %color image
bw=segmentation(I); % the result is a binary image where the object detected (ROI) is white
img = bsxfun(@times, I, cast(bw,class(I)));
edge2 = edge(bw, 'prewitt');
edge2 = 1 - edge2;
[barx,bary]=barycentre(edge2);
edge2 = recentre(edge2,barx,bary);
I2 = recentre(bw,barx,bary);
I3 = recentre(img,barx,bary);

The function

function im_trans=recentre(image,barx,bary)
[X,Y]=size(image);
tx=floor(X/2)-barx;
ty=floor(Y/2)-bary;
im_trans = zeros(X, Y);
if tx>=0
    if ty>=0
        for i=1 : X-tx
            for j=1 : Y-ty
                im_trans(i+tx, j+ty) = image(i, j);
            end
        end
    elseif ty<0
        for i=1 : X-tx
            for j=abs(ty)+1 : Y
                im_trans(i+tx, j+ty) = image(i, j);
            end
        end
    end
elseif tx<0
    if ty>=0
        for i=abs(tx)+1 : X
            for j=1 : Y-ty
                im_trans(i+tx, j+ty) = image(i, j);
            end
        end
    elseif ty<0
        for i=abs(tx)+1 : X
            for j=abs(ty)+1 : Y
                im_trans(i+tx, j+ty) = image(i, j);
            end
        end
    end
end
can you help me to correct it please
Sean de Wolski

Contact us