The Netherlands international, who spent last season on loan with the Potters, joins on a five-year deal.
Last season, Martins Indi, 25, made 35 Premier League appearances and scored once as Stoke finished 13th.
"Bruno loved being with us last season and made no secret of his desire to move here permanently," Stoke's chief executive Tony Scholes said.
"We've had to be patient in our dealings with Porto but we're really pleased with the outcome."
Need a VPN? Or seeking to switch? Then support Tribal Football by clicking here to sign up with our official partners NordVPN. Not only will you receive the best VPN experience, but also great discounts by signing up via Tribal Football. Thanks for your support!