Is it possible to get rid of mining pools and therefore get a truly decentralized bitcoin? There are some criticism that PoW of bitcoin and ethereum protocol suffers from the centralization of mining pools, and dPos such as EOS claimed to be more decentralized in practice than bitcoin and ethereum even it only has 21 block producers.

My question is, is there any possibility to get rid of large mining pools centralization? Ethereum tried to make the hashing algorithms ASIC hard, but it seems that it doesn't do any better.
There's a group of us working on a new iteration of p2pool based on braids (a DAG-chain) and mining into payment (Lightning) channels.  Like p2pool, each miner would construct his own block, and provide commitments/proof that payouts from the share-chain will be made to the appropriate Lightning channels (probably using "channel factories").  Braids solve incentive problems due to latency, and payment channels allow for small payments to a large number of miners without having those payouts compete for block space. p2pool is all but dead for a number of unfortunate reasons...among them is that it actually punishes latency more harshly than the underlying blockchain, and a widespread (incorrect) perception that people were making less money on p2pool.

To answer your question, yes it's most definitely possible to get rid of centralized mining pools, but there's lots of work to be done.  Such a pool could in principle execute the selfish mining strategy for pool members if it had enough hashpower (without reducing the security of the chain).  This would cause centralized pools to be less profitable than the decentralized pool, and economically encourage everyone to join the decentralized pool.

There's also a concept of pooled-solo mining which as far as I know has never been implemented, though the idea is from 2013.  

Join us on irc.freenode.net in the channel #braidpool if you're interested in working on this.