Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.
公告
FPGA community forums and blogs have moved to the Altera Community. Existing Intel Community members can sign in with their current credentials.

ippirotate in ipp 9.0

steffenroeber
初学者
1,933 次查看

Hi,

i'm trying to migrate to 9.0. I found that ippirotate isno longer available and I found an article how to roate using warping functions. But that does not work. I want to rotate around the image center and the destination image resize is enlarged to show the whole rotated image:

IppiSize srcSize = { i_src.getWidth(), i_src.getHeight() };
  IppiRect srcRect = { 0, 0, i_src.getWidth(), i_src.getHeight() };
  float64 coeffs[2][3];
  float64 bound[2][2];
  float64 shiftX;
  float64 shiftY;
  auto status = ippiGetRotateShift(srcSize.width / 2, srcSize.height / 2, degrees, &shiftX, &shiftY);
  status = ippiGetRotateTransform(degrees, -shiftX, shiftY, coeffs);
  status = ippiGetAffineBound(srcRect, bound, coeffs);
  IppiSize dstSize = { bound[1][0] - bound[0][0] + 1, bound[1][1] - bound[0][1] + 1 };
  cImg dstImg(i_src.getImgType().getTypeId(), dstSize.width, dstSize.height);
  sint32 specSize = 0;
  sint32 bufferSize = 0;
  float64 borderValue[] = { 0 };
  status = ippiWarpAffineGetSize(srcSize, dstSize, ipp8u, coeffs, ippLinear, ippWarpForward, ippBorderConst, &specSize, &bufferSize);
  IppiWarpSpec *spec = reinterpret_cast<IppiWarpSpec *>(ippsMalloc_8u(specSize));
  status = ippiWarpAffineLinearInit(srcSize, dstSize, ipp8u, coeffs, ippWarpForward, 1, ippBorderConst, borderValue, 0, spec);
  m_buffer.resize(bufferSize);
  IppiPoint dstOffset = { 0, 0 };
  status = ippiWarpAffineLinear_8u_C1R(i_src.getPixel<uint8>(0, 0), i_src.getYPitch(),
                                       dstImg.getPixel<uint8>(0, 0), dstImg.getYPitch(), dstOffset, dstSize, spec, m_buffer.data());

 

But the resulting image is wlays slightly outside the image boundaries.

0 项奖励
4 回复数
Chao_Y_Intel
主持人
1,933 次查看

Hello, 

I attached an rotate example with Affine,   could you have have if it works for your? 

Thanks,
Chao

0 项奖励
steffenroeber
初学者
1,933 次查看

Hi,

your example is very similar to my code. But how do you compute the correct shiftX and shiftY values?

 

0 项奖励
Jonghak_K_Intel
1,933 次查看

Hi steffenroeber,

Please check here https://software.intel.com/en-us/node/504405 for ippiGetRotateShift that computes shift values for rotation.

Thank you 

0 项奖励
steffenroeber
初学者
1,933 次查看

The ippiGetRotateShift only helps, if the destination image has same size as sozrce. Finally I found another solution:
 

ippiGetRotateTransform(angle, 0, 0, coeffs);
float64 bound[2][2];
ippiGetAffineBound(srcRect, bound, coeffs);
dstSize.width = bound[1][0] - bound[0][0] + 1;
dstSize.height = bound[1][1] - bound[0][1] + 1;
coeffs[0][2] = -bound[0][0];
coeffs[1][2] = -bound[0][1];

 

0 项奖励
回复